jquery:每次选择新选项时,从多个选择菜单中获取值

jquery:每次选择新选项时,从多个选择菜单中获取值,jquery,select,onchange,Jquery,Select,Onchange,我正在使用jQuery构建一个实时报价表单,使用一系列选择菜单。我想出了下面的代码,它从每个选择菜单中获取默认值并将它们添加到一起: $(document).ready(function(){ $('select > option:selected').each(function() { var value = $(this).attr('label'); total = parseFloat(total) + parseFloat(value); total = tota

我正在使用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个

我尝试添加带有触发器的$select.changefunction{…},如中所示,但这会将每个选择菜单的所有值相加,即总数是其应有值的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>
在change调用中进行测试时,需要确保在单击的select元素的上下文中搜索选项

$('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);
});
在change调用中进行测试时,需要确保在单击的select元素的上下文中搜索选项

$('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);
});

马特,我想你在我脑海里触发了什么,因为我发现了——至少,到目前为止,它是有效的

下面是执行此操作的代码:

$(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 total=0块的位置,每次进行新的选择时都必须重置它。

马特,我想你在我脑海中触发了一些东西,因为我发现了——至少到目前为止,它是有效的

下面是执行此操作的代码:

$(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 total=0工件的位置,每次进行新选择时都必须重置该零件。

感谢您的回复。这还不够,因为每次进行新选择时,总数都会重置为所选选项的值。如果我将var total=0移到change函数之外,则每个新选择都会不断添加到总数中,而不是替换上一个选择。我希望这是有道理的。。。我还必须保持加法不变,分成两行,因为否则total的作用就像一个字符串如果我没弄错的话,它似乎与您评论中更新的代码位于同一位置。至于为什么要将加法分成两行,这是有道理的,因为toFixed返回一个字符串,这意味着每次循环中total的值都是一个字符串。很高兴我能帮你指引正确的方向谢谢你的回复,马特。这还不够,因为每次进行新选择时,总数都会重置为所选选项的值。如果我将var total=0移到change函数之外,则每个新选择都会不断添加到总数中,而不是替换上一个选择。我希望这是有道理的。。。我还必须保持加法不变,分成两行,因为否则total的作用就像一个字符串如果我没弄错的话,它似乎与您评论中更新的代码位于同一位置。至于为什么要将加法分成两行,这是有道理的,因为toFixed返回一个字符串,这意味着每次循环中total的值都是一个字符串。很高兴我能帮你指引正确的方向