使用each()求和值

时间:2014-06-20 15:09:06

标签: javascript jquery each

每次更改其中一个选项时,我都会尝试返回值的总和。但总和总是错误的:

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

http://jsfiddle.net/vAu3E/

6 个答案:

答案 0 :(得分:9)

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

JSFiddle

答案 1 :(得分:4)

使用this.value(比你已经拥有它时重新获得jQuery对象更快)并声明a所以它不是全局的(我也立即调用了处理程序,所以你的结果立即显示):< / p>

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

http://jsfiddle.net/vAu3E/10/

在IE版本中查看this.value潜在问题的评论

答案 2 :(得分:2)

使用插件,您将拥有:

$('select').change(function () {
    $('h1 span').html($('option:selected').sum());
});

FIDDLE:http://jsfiddle.net/abdennour/vAu3E/18/

您使用val方法,因为您的元素是option标记。但是,如果它是DIV内容元素的总和,您必须使用html方法而不是val

所以,sum插件仍然有用:

   $('div.operators').sum('html');

答案 3 :(得分:1)

我建议:

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

fiddle

答案 4 :(得分:1)

显然结果是正确的,因为你必须替换&#34;选项:selected&#34;有了这个:

a += parseInt($(this).val(), 10);

如果你选择&#34;选项:select&#34;选择器是第一个选择器,而不是$(this)你得到每个选择的值......

希望这条评论可以帮助你...... 再见

答案 5 :(得分:1)

parseInt的替代品;预先加+会将'numeric`字符串转换为数字:

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

WORKING JSFIDDLE DEMO