2012-02-10 51 views
0

此功能警報右totalqt只有當我檢查複選框一個接一個。但不適用於#check_all正常工作:警報totalqt = 0檢查一次所有的複選框的JavaScript

我沒有什麼錯的,任何人都可以解釋一下嗎?

var totalqt=0; 
    $('#check_all').click(function() { 
     $('.checkbox').click();  
     alert(totalqt); 
    });  


$('.checkbox').click(function(e) { 
     e.stopPropagation(); 
     if($(this).closest("tr").not('#hdr').hasClass("row_selected")){ 
      $(this).closest("tr").not('#hdr').removeClass("row_selected"); 
      totalqt=totalqt - parseInt($(this).closest("tr").find("#qt").text(), 10); 
     } 
     else { 
      $(this).closest("tr").not('#hdr').addClass("row_selected"); 
      totalqt=totalqt + parseInt($(this).closest("tr").find("#qt").text()); 
     } 

HTML看起來像

<tr> 
... 
<td><input type="checkbox" name="checkbox[]" method="post" value="" class="checkbox"/></td> 
... 
</tr> 
+0

'。點擊()'只會觸發事件處理程序但不實際更改狀態或觸發的默認操作。的[選擇/取消所有複選框] – 2012-02-10 17:38:54

+2

可能重複(http://stackoverflow.com/questions/4805056/check-uncheck-all-checkboxes) – 2012-02-10 17:39:51

回答

1

實際上當複選框被改變manualy它不會觸發處理程序。嘗試這樣的事情。

function doIt(obj){ 
     if($(obj).closest("tr").not('#hdr').hasClass("row_selected")){ 
      $(obj).closest("tr").not('#hdr').removeClass("row_selected"); 
      totalqt=totalqt - parseInt($(obj).closest("tr").find("#qt").text(), 10); 
     } 
     else { 
      $(obj).closest("tr").not('#hdr').addClass("row_selected"); 
      totalqt=totalqt + parseInt($(obj).closest("tr").find("#qt").text()); 
     } 
} 

然後

$('.checkbox').click(function(e) { 
     e.stopPropagation(); 
     doIt(this); 
}); 

$('#check_all').click(function() { 
     if($(this).prop('checked')){ 
      $('.checkbox').each(function(){ 
       $(this).prop('checked', true);  
       doIt(this); 
       alert(totalqt); 
      }); 
     }else{ 

      $('.checkbox').each(function(){ 
       $(this).prop('checked', false);  
       doIt(this); 
       alert(totalqt); 
      }); 
     } 

}); 
+0

不起作用。同樣的結果 – 2012-02-10 17:42:42

+0

更新答案..嘗試.. – 2012-02-10 17:48:31

+0

顯示屏幕http://screencast.com/t/c7GlBjwdh5X進行檢查全部打勾。當勾去掉 - 在所有 – 2012-02-10 18:02:36

0

我已經改變了我的回答以下,試試這個:

<div class="checkall"> 
    <input type="checkbox" id="checkall"> 
</div> 
<div id="list"> 
    <input type="checkbox" /> 
    <input type="checkbox" /> 
    <input type="checkbox" /> 
    <input type="checkbox" /> 
    <input type="checkbox" /> 
</div> 

和jQuery:

var checkboxes = $(":checkbox", "#list").change(function() { 
    var allIsChecked = checkboxes.length === checkboxes.filter(":checked").length; 

    checkAll[0].checked = allIsChecked; 

});

var checkAll = $("#checkall").change(function() { 
     checkboxes.prop("checked",this.checked); 
}); 
+0

不起作用。同樣的結果 – 2012-02-10 17:44:03

+0

我改變了所有的代碼,再試一次。 – Downpour046 2012-02-10 18:57:38