使用Javascript一次检查所有复选框

时间:2012-02-10 17:37:19

标签: javascript jquery checkbox triggers

此功能仅在我逐个选中复选框时才会提示正确的totalqt。但是对于#check_all不起作用:alerts totalqt = 0.

我做错了什么,谁能解释一下?

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>

2 个答案:

答案 0 :(得分:1)

实际上当手动更改复选框时,它不会触发处理程序。试试这样的事情。

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

} );

答案 1 :(得分: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);
});