Javascript复选框不正确的计算

时间:2011-04-22 13:38:09

标签: javascript checkbox sum

嘿伙计我有6个复选框,并使用他们的“rel =”值来累加并显示总和。但是,如果我复选框1和3以及6,则添加会忽略框3,并且不会将其添加到总和中。所以基本上检查的最低和最高的checbox都是加起来而不是所有被检查的。

想知道是否有人能找到原因。

$(document).ready(function() {
    function recalculate() {
        var sum = 0;
        var base = 0;
        var d=new Date();
        var theDay=d.getDay();
        switch (theDay)
        {
            case 6:
              base = 30;
            break;
            case 0:
              base = 30;
              break;
            default:
            base = 49 ;
        }

        $("input[type=checkbox]:checked").each(function() {
             sum = parseInt($(this).attr("rel")) + base;
        });

        $("#output").html(sum);
    }

    $("input[type=checkbox]").change(function() {
        recalculate();
    });

});

4 个答案:

答案 0 :(得分:2)

每次在sum循环中,您都会覆盖each()的值。这就是你能做的:

 sum = base;
 $("input[type=checkbox]:checked").each(function() {
     sum += parseInt($(this).attr("rel"));
 });

答案 1 :(得分:1)

猜测一下,你需要改变这一行:

$("input[type=checkbox]:checked").each(function() {
  sum = parseInt($(this).attr("rel")) + base;
});

对此:

$("input[type=checkbox]:checked").each(function() {
  sum += parseInt($(this).attr("rel")) + base;
});

使用当前代码,实际上并未计算总和,因为每次获得下一个复选框的rel=值时,您将覆盖之前的总和值。

编辑:如果您不想每次添加基础,只需将该分配移出循环即可。像这样:

sum = base;
$("input[type=checkbox]:checked").each(function() {
  sum += parseInt($(this).attr("rel"));
});

答案 2 :(得分:0)

尝试

$("input[type=checkbox]").click(function() {
        recalculate();
    });

rel属性用于锚标记

而不是rel属性使用值或id

答案 3 :(得分:0)

您正在重置以下代码中每个复选框的总和:

$("input[type=checkbox]:checked").each(function() {
     sum = parseInt($(this).attr("rel")) + base;
});