2012-03-12 20 views
-3

このスクリプトを動作させようとしていますが、最後の警告のどこかでエラーが発生しています。スクリプトはフォームからすべてを取り出し、結果をアラートボックスとして吐き出すことになっています。私は自分のhtmlが正しいと確信しています。JavaScriptのヘルプ!スクリプトが動作しない

function calcServiceTotal() { 
var animalName = document.getElementById("name").value; 
var ownerName = document.getElementById("owner").value; 
var currentDate = document.getElementById("date").value; 
var choosenService = document.getElementById("service"); 
var serviceName = choosenService.options[choosenService.selectedIndex].text; 
var serviceCost = document.getElementById("value").value; 
var taxCost = serviceCost * 0.07; 
var totalCost = serviceCost + taxCost; 
if (animalName == null || animalName == "") 
    { 
    alert("Please give us your pet's name."); 
    return false; 
    } 
else if (ownerName == null || ownerName == "") 
    { 
    alert("Please give us your name."); 
    return false; 
    } 
else if (currentDate== null || currentDate == "") 
    { 
    alert("Please give us a date."); 
    return false; 
    } 
else 
    { 
    alert("Pet's Name:" + animalName + '\n' + "Owner's Name:" + ownerName + '\n' + "Service:" + choosenService + '\n' + "Cost: $" + serviceCost.toFixed(2) + '\n' + "Tax: $" + taxCost.toFixed(2) + "Total Cost:" + totalCost.toFixed(2)); 
    } 
} 

これは、関連するHTMLコードです。

<table width="339" border="0"> 
      <tr> 
      <td width="329"><strong>Patient Information</strong></td> 
      </tr> 
      <tr> 
      <td>&nbsp;</td> 
      </tr> 
      <tr> 
      <td>Name: &nbsp;&nbsp; 
      <label for="textfield"></label>  <input type="text" name="textfield" id="name" /></td> 
      </tr> 
      <tr> 
      <td>Owner: &nbsp; 
      <input type="text" name="textfield2" id="owner" /></td> 
      </tr> 
      <tr> 
      <td>Date: &nbsp;&nbsp;&nbsp; 
      <input type="text" name="textfield3" id="date" /></td> 
      </tr> 
      <tr> 
      <td>&nbsp;</td> 
      </tr> 
      <tr> 
      <td><strong>Services</strong></td> 
      </tr> 
      <tr> 
      <td>&nbsp;</td> 
      </tr> 
      <tr> 
      <td><form id="form1" name="form1" method="post"> 
       Select a Service: 
       <label for="select"></label> 
       <select name="select" id="service"> 
       <option>Basic Appointment - $50</option> 
       <option>Extended Appointment - $75</option> 
       <option>Vacination - $25</option> 
       <option>Grooming - $35</option> 
       <option>Bathing - $35</option> 
       </select> 
      </form></td> 
      </tr> 
      <tr> 
      <td>Service Fee (from above): &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
       <label for="textfield4"></label> 
       <input type="text" name="textfield4" id="value" /> 
      </td> 
      </tr> 
      <tr> 
      <td><form id="form2" name="form2" method="post" action=""> 
       <input type="button" onclick="calcServiceTotal();" name="button" id="button" value="calculate"/> 
      </form></td> 
      </tr> 
     </table> 
+2

は[SO]へようこそ。 [faq]を見直してください。あなたは、質問を書いている間に、質問の様子のプレビューが質問そのものの下に現れることに気付くかもしれません。あなたのコードを見やすくするために書式を設定することができるかどうかは、とても親切です。あなたの質問をあまりにも早く提出するために急いでいないで、あなたの時間を取って、徹底的にそれを確認してから送信ボタンを押してください。 – zzzzBov

+0

実際のデバッガを使用してください。 –

+0

また、[jsfiddle](http://jsfiddle.net)などのサービスを使用して、大きなサイズのHTMLがある場所では、CSSとJSが役立ちます。 – zzzzBov

答えて

4

問題は、あなたは、このようなFirebugのようなデバッグ・ツールを使用している場合、すなわちtoFixed()

これらのエラーを見つけることは容易である、定義されていない機能を使用している次のとおりです。

enter image description here

明確にするために、toFixedは関数ですが、Javascriptはゆるやかに型付けされていますが、指定された文脈ではtoFixedを文字列に適用していますこの文脈では、文字列を強制的に数値にすることはできません。

あなたはにあなたの最後の警告を変更することで、手動で指定する必要があります。そのような代わりにほかの(番号を格納)2つの文字列値を連結し、あなたのコード内の他のエラーがあることを

alert("Pet's Name:" + animalName + '\n' + "Owner's Name:" + ownerName + '\n' + "Service:" + choosenService + '\n' + "Cost: $" + Number(serviceCost).toFixed(2) + '\n' + "Tax: $" + Number(taxCost).toFixed(2) + "Total Cost:" + Number(totalCost).toFixed(2));

注意。

+0

toFixed()は関数ですが、数値の場合です。次のようにします:Number(document.getElementById( "value")。value).toFixed() – Tom

0

私はいくつかのバグを取り除く:

function calcServiceTotal() { 
    var animalName = document.getElementById("name").value; 
    var ownerName = document.getElementById("owner").value; 
    var currentDate = document.getElementById("date").value; 
    var choosenService = document.getElementById("service").value; 
    var serviceCost = Number(document.getElementById("value").value); 
    var taxCost = serviceCost * 0.07; 
    var totalCost = serviceCost + taxCost; 
    if (animalName == null || animalName == "") { 
     alert("Please give us your pet's name."); 
     return false; 
    } else if (ownerName == null || ownerName == "") { 
     alert("Please give us your name."); 
     return false; 
    } else if (currentDate== null || currentDate == "") { 
     alert("Please give us a date."); 
     return false; 
    } else { 
     alert("Pet's Name:" + animalName + '\n' + "Owner's Name:" + ownerName + '\n' + "Service:" + choosenService + '\n' + "Cost: $" + serviceCost.toFixed(2) + '\n' + "Tax: $" + taxCost.toFixed(2) + "Total Cost:" + totalCost.toFixed(2)); 
    } 


<table width="339" border="0"> 
    <tr> 
     <td width="329"><strong>Patient Information</strong></td> 
    </tr> 
    <tr> 
     <td>&nbsp;</td> 
    </tr> 
    <tr> 
    <td>Name: &nbsp;&nbsp; 
     <label for="textfield"></label>  <input id="name" type="text" name="textfield" id="name" /></td> 
    </tr> 
    <tr> 
     <td>Owner: &nbsp; 
     <input type="text" name="textfield2" id="owner" /></td> 
    </tr> 
    <tr> 
     <td>Date: &nbsp;&nbsp;&nbsp; 
      <input type="text" name="textfield3" id="date" /> 
     </td> 
    </tr> 
    <tr> 
     <td>&nbsp;</td> 
    </tr> 
    <tr> 
     <td><strong>Services</strong></td> 
    </tr> 
    <tr> 
     <td>&nbsp;</td> 
    </tr> 
    <tr> 
     <td> 
      <form id="form1" name="form1" method="post"> 
       Select a Service: 
       <label for="select"></label> 
       <select name="select" id="service"> 
        <option value="Basic Appointment - $50">Basic Appointment - $50</option> 
        <option value="Extended Appointment - $75">Extended Appointment - $75</option> 
        <option value="Vacination - $25">Vacination - $25</option> 
        <option value="Grooming - $35">Grooming - $35</option> 
        <option value="Bathing - $35">Bathing - $35</option> 
       </select> 
      </form> 
     </td> 
    </tr> 
    <tr> 
     <td>Service Fee (from above): &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      <label for="textfield4"></label> 
      <input type="text" name="textfield4" id="value" /> 
     </td> 
    </tr> 
    <tr> 
     <td> 
      <form id="form2" name="form2" method="post" action=""> 
       <input type="button" onclick="calcServiceTotal();" name="button" id="button" value="calculate"/> 
      </form> 
     </td> 
    </tr> 
</table> 
+0

私はchoosenService.selectedIndexを使用していません。 – Tom

関連する問題