2013-11-29 37 views
0

我有一個函數:簡單的onClick回報功能無法正常工作

 <script type = "text/javascript"> 
     function calcEstimate(instrument, damage) 
     { 
      var cost = 0; 
      if (instrument.value == "guitar" || instrument.value == "bass") 
      { 
       cost = Number(damage.value) * 150; 
       document.getElementById('txtCost').value = cost; 
      } 
      else 
      { 
       cost = Number(damage.value) * 300; 
       document.getElementById('txtCost').value = cost; 
      } 
     } 
    </script> 

而且形式與一些輸入:

  <form style = "border: solid white 1px; width:35%;" name = "calculator"> 
      <table> 
       <tr> 
        <th style = "font-size: 20px;" colspan = 3;> Select your instrument: </th> 
       </tr> 

       <tr> 
        <th> Percussion: </th> 
        <th> Strings: </th> 
        <th> Brass: </th> 
       </tr> 

       <tr> 
        <td> <input type = "radio" name = "instrument" value = "keyboard_piano">Keyboard/ Piano. </td> 
        <td> <input type = "radio" name = "instrument" value = "guitar">Guitar. </td>      
        <td> <input type = "radio" name = "instrument" value = "bass">Trumpet. </td> 
       </tr> 

       <tr> 
        <td> <input type = "radio" name = "instrument" value = "bass_drum">Bass drum. </td> 
        <td> <input type = "radio" name = "instrument" value = "bass">Bass. </td> 
        <td> <input type = "radio" name = "instrument" value = "trombone">Trombone. </td> 
       </tr> 

       <tr> 
        <td> <input type = "radio" name = "instrument" value = "snare_drum">Snare drum. </td> 
        <td> <input type = "radio" name = "instrument" value = "violin">Violin. </td>      
        <td> <input type = "radio" name = "instrument" value = "tuba">Tuba. </td> 
       </tr> 

       <tr> 
        <td> <input type = "radio" name = "instrument" value = "tom_toms">Tom-toms. </td> 
        <td> <input type = "radio" name = "instrument" value = "cello">Cello. </td>      
       </tr> 

       <tr> 
        <td> <input type = "radio" name = "instrument" value = "ride_cymbal">Ride Cymbal. </td> 
       </tr> 

       <tr> 
        <td> <input type = "radio" name = "instrument" value = "crash_cymbal">Crash Cymbal. </td> 
       </tr> 

       <tr> 
        <td> <input type = "radio" name = "instrument" value = "hi_hat">Hi-hat. </td> 
       </tr>      

      </table> 

      <table> 
       <tr> 
        <th style = "font-size: 20px;"> Scale of damage: </th> 
       </tr> 

       <tr> 
        <td> <input type = "radio" name = "damage" value = "1">1. Slight damage, cracks. </td> 
       </tr> 

       <tr> 
        <td> <input type = "radio" name = "damage" value = "2">2. Some broken parts. </td> 
       </tr> 

       <tr> 
        <td> <input type = "radio" name = "damage" value = "3">3. Parts missing, broken off, may be unplayable. </td> 
       </tr> 

       <tr> 
        <td> <input type = "radio" name = "damage" value = "4">4. In pieces, completely unplayable. </td> 
       </tr> 
      </table> 

      <table> 
       <tr> 
        <td> 
         <input type = "button" name = "calculate" value = "Calculate" onClick ="calcEstimate(instrument,damage);"> 
         <input type = "reset" name = "reset" value = "Reset Form"> 
        </td> 
       </tr>     

       <tr> 
        <th style = "font-size: 20px;"> Estimate: </th> 
       </tr> 

       <tr> 
        <td> <input type = "text" id="txtCost" name = "cost" size = 25> </td> 
       </tr> 
      </table> 
     </form> 

我希望能夠選擇單選按鈕instrument和無線電按鈕damage,點擊calculate按鈕並通過damageinstrument函數calcEstimate,它將在那裏進行計算並返回變量cost。但是,當我點擊計算按鈕時,根本沒有任何反應。我做了很多其他的嘗試,並搜索了互聯網,但沒有發現我似乎在幫助。

+3

你的第一個錯誤是使用'onclick'你的HTML裏面。這從來不是一個好的做法。 – m59

+0

onclick inhtml沒有任何問題 – MultiplyByZer0

+0

我能夠在firefox和chrome中運行你的代碼,並且js運行並使用150填充成本框。你的邏輯不一定看起來正確,但是在功能上這是工作的。 – ohiodoug

回答

0

您的JavaScript將是:

var damageValue = 0; 
function getDamage(val){ 
    damageValue = val; 
} 
function calcEstimate(instrument, damage) 
      { 
       var cost = 0; 
       if (instrument.value == "guitar" || instrument.value == "bass") 
       { 
        cost = Number(damageValue) * 150; 
        document.getElementById('txtCost').value = cost; 
       } 
       else 
       { 
        cost = Number(damageValue) * 300; 
        document.getElementById('txtCost').value = cost; 
       } 
      } 

和你的HTML會是這樣的:

<input type = "radio" name = "instrument" value = "guitar">Guitar. 
<input type = "radio" name = "damage" value = "1" onclick="getDamage(this.value);"> 

<input type = "button" name = "calculate" value = "Calculate" onClick ="calcEstimate(instrument,damage);"> 
<input type = "text" id="txtCost" name = "cost" size = 25> 

請確保您有一個工具,當你使用它上面的計算對象。如果沒有,你應該嘗試學習JavaScript比現在更多。

+0

這填充了「NaN」的框,這比絕對沒有更好。我用完整的代碼編輯了我的原始文章,因爲我只粘貼了我認爲會導致問題的部分。另外,我正在爲學校製作這個網頁,並且該功能必須返回,這對我來說更加困難。 –

+0

那麼你檢查instrument.value和damage.value?如果不是,請使用alert()函數進行檢查。 – HICURIN

+0

我剛剛檢查過它們,並且它們對它們都表示「未定義」? –

1
<label><input type="radio" name="instrument" value="guitar">Guitar</label> 
<label><input type = "radio" name="damage" value="1">Damage</label> 

<button name="calculate">Calculate</button> 
<input type="text" name="cost" size="25"> 

js: live demo here (click).

/* Get your element references */ 
var instrument = document.querySelector('input[name=instrument]'); 
var damage = document.querySelector('input[name=damage]'); 
var calculate = document.querySelector('button[name=calculate]'); 
var cost = document.querySelector('input[name=cost]'); 

calculate.addEventListener('click', function() { 
    cost.value = calcEstimate(instrument.value, damage.value); 
}); 

function calcEstimate(instrument, damage) { 
    var cost = 0; 
    if (instrument.value == "guitar" || instrument.value == "bass") { 
    cost = Number(damage) * 150; 
    } 
    else { 
    cost = Number(damage) * 300; 
    } 
    return cost; 
}