2009-10-14 62 views
1

我正在用jQuery構建一個實時價格報價表單,使用一系列選擇菜單。我想出了下面的代碼,它抓住每個選擇菜單的默認值並將它們相加:jquery:每次選擇一個新選項時從多個選擇菜單中獲取值

$(document).ready(function(){ 
$('select > option:selected').each(function() { 
    var value = $(this).attr('label'); 

    total = parseFloat(total) + parseFloat(value); 
    total = total.toFixed(2); 
}); 
printTotal(total); // prints the total price 
}); 

唯一的問題是,這隻能在頁面加載時。我希望每次在任何選擇菜單中選擇一個新值時都會更新價格(有6個)。

我嘗試添加$(「選擇」)。改變(函數(){...}與觸發器(如example code here所示),但加起來的所有值的每個選擇菜單(即總的6倍它應該是什麼)

我搜索的文檔,但無法計算要使用的事件誰能幫

HTML樣品是否有幫助:?

<select id="colors"> 
<option label="25.00" value="XYZ">1 color</option> 
<option label="50.50" value="ABC">2 colors</option> 
<option label="75.75" value="MNO">3 colors</option> 
</select> 

回答

1

馬特,我想你觸發了我的腦海裏的東西,因爲我想通了 - 至少,它工作至今。

這裏是做它的代碼:

$(document).ready(function(){ 
    $('select').change(function() { 
     var total = 0; 
     $('select > option:selected').each(function() { 
      var value = $(this).attr('label'); 

      total = parseFloat(total) + parseFloat(value); 
      total = total.toFixed(2); 
     }); 
     printTotal(total); 
    }); 
}); 

它下來到總VAR = 0件,其中有一個新的選擇是由每次進行復位的放置。

0

當在內測試時呼叫,您需要確保您在單擊的select元素的上下文中搜索option

$('select').change(function() { 
    var total = 0; 

    // note the second parameter passed to the $() function below 
    $('option:selected', $(this)).each(function() { 
     var value = $(this).attr('label'); 
     total += parseFloat(value).toFixed(2); 
    }); 
    printTotal(total); 
}); 
+0

感謝您的迴應馬特。這並沒有完全實現,因爲每次進行新的選擇時總數都被重置爲所選選項的值。如果我在變更函數之外移動「var total = 0」,那麼每個新選擇都會繼續添加到總數上,而不是替換上次選擇。我希望這是有道理的... 我還必須保持我的添加相同,打破2行,否則「總」保持行爲像一個字符串。 – 2009-10-15 01:34:05

+0

我的'var total = 0;'的位置如果我沒有弄錯,似乎與您評論中的更新代碼位於相同的位置。至於爲什麼你將你的添加分成兩行,這是有道理的,因爲toFixed()返回一個字符串,這意味着每次循環中total的值將是一個字符串。很高興我能幫助你引導你正確的方向! :) – 2009-10-15 04:37:41

相關問題