2011-04-22 116 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