我正在使用 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 个)中选择新值时都会更新价格。

我尝试添加 $("选择").change(function () { ...} 用触发器(如图所示 示例代码在这里),但这会将每个选择菜单的所有值相加(即总数是应有值的 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>
有帮助吗?

解决方案

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

这是执行此操作的代码:

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

这归结为放置 总变量 = 0 件,每次做出新选择时都必须重置。

其他提示

测试时在 change 致电,您需要确保您进行搜索 options 在上下文中 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);
});
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top