2011-04-22 94 views
2

嘿家伙我有6个复选框,我正在使用它们的“rel =”值来合计并显示总和。但是,如果我复选框1和3和6,则添加忽略框3,并且不会将其添加到总和中。因此,基本上检查的最低和最高的checboxes是加起来而不是所有被检查的。想知道是否有人可以找到原因。Javascript复选框不正确的计算

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

}); 
+0

这是什么基础? – Dharmesh 2011-04-22 13:43:12

回答

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")); 
}); 
+0

这将每次都添加'base' :) – 2011-04-22 13:49:05

+0

@ no.good.at.coding - 良好的通话,更新了我的代码。编辑:哦,我们的代码是一样的! :-P – 2011-04-22 13:53:21

2

你覆盖在each()循环的每个时间sum值。这是你可以做什么:

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

尝试

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

rel属性是锚标记

和代替rel属性使用价值或ID

0

您重置为每个复选框总和在下面的代码:

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

您需要将+ base移出每个循环。 – Josh 2011-04-22 13:55:42