Javascript 使用每个()求和值

Javascript 使用每个()求和值,javascript,jquery,each,Javascript,Jquery,Each,我试图返回值的总和​​每次更改一个选择时。但总数总是错的: $('select').change(function () { a = 0; $('select').each(function () { a += parseInt($('option:selected').val(), 10); }); $('h1 span').html(a); }); 使用this.value(比您已经拥有jQuery对象时重新获取它要快)并声明a,这样它就不是全局的(我还立即调用了处理程序,

我试图返回值的总和​​每次更改一个选择时。但总数总是错的:

$('select').change(function () {
 a = 0;
 $('select').each(function () {
    a += parseInt($('option:selected').val(), 10);
 });
 $('h1 span').html(a);
});

使用
this.value
(比您已经拥有jQuery对象时重新获取它要快)并声明
a
,这样它就不是全局的(我还立即调用了处理程序,这样您的结果就会立即显示):

有关IE版本中的
this.value
的潜在问题,请参阅注释

$('select').change(function () {
    var a = 0;
    $('select').each(function () {
        a += parseInt(this[this.selectedIndex].value, 10);
    });
    $('h1 span').html(a);
});

使用sum插件,您将拥有:

$('select').change(function () {
    $('h1 span').html($('option:selected').sum());
});
小提琴: 注 您使用
val
方法,因为您的元素是
option
tag。但是,例如,如果它是DIV内容元素的总和,则必须使用
html
方法而不是
val

因此,sum插件仍然很有用:

   $('div.operators').sum('html');
我建议:

$("select").on("change", function(){
    var a = 0;
    $("select").each(function(){
        a += parseInt($(this).val());
    });
    $('h1 span').html(a);
});

显然,结果是正确的,因为您必须用以下内容替换“选项:已选择”:

a += parseInt($(this).val(), 10);
如果您将“option:selected”放在第一个选择器上,则使用$(这)可以获得每个选择的值

希望这个评论能帮助你。。。
再见

除了parseInt,还有另一种选择;在
+
前面加上前缀将“数值”字符串转换为数字:

$('select').change(function () {
    var a = 0;
    $('select').each(function () {
        a += +this.value;
    });
    $('h1 span').html(a);
});

为什么
这个.value
更好?它在大多数IE浏览器中都会失败。@CookieMonester——当您已经在集合上迭代时,初始化另一个jQuery对象没有意义——它以当前元素为目标——不是通用的
选项:选中的
不调用选择框中的.value,或者使用
$(this).val()
或使用其选项读取值:
this.options[this.selectedIndex].value
-selectbox.value在某些浏览器上未定义。@scragar--什么浏览器?IE(我想可能甚至是版本11)没有为
select
元素提供
.value
属性。当然可以填充。
var sum=$(“选择选项:selected”).toArray().reduce(函数(sum,val){return sum+val;},0)
$('select').change(function () {
    var a = 0;
    $('select').each(function () {
        a += +this.value;
    });
    $('h1 span').html(a);
});