jquerycheckall复选框

jquerycheckall复选框,jquery,checkbox,Jquery,Checkbox,我无法使用此复选框检查未隐藏的复选框 基本上,我需要它不要选中表中任何隐藏在视图中的复选框 快速修复是用这个代码替换上面的代码 $("input:checkbox.checkall").live('click', function(event){ var checkedStatus = this.checked; $("td.small input[type=checkbox]:visible").each(function() { this.c

我无法使用此复选框检查未隐藏的复选框

基本上,我需要它不要选中表中任何隐藏在视图中的复选框

快速修复是用这个代码替换上面的代码

$("input:checkbox.checkall").live('click', function(event){
    var checkedStatus = this.checked;

        $("td.small input[type=checkbox]:visible").each(function() {
            this.checked = checkedStatus;
        });

});

理想情况下,您应该使用change事件,因为输入可以通过单击进行更改。您还可以找到所有隐藏了
ui tableFilter
的行,然后选中相应的复选框。我还使用
prop
来标识复选框的选中状态,从jQuery 1.6开始就可以使用,不过
this.checked
也可以使用

$("input:checkbox.checkall").change(function(){
    var jCheckAll = $(this);
    var checkedStatus = jCheckAll.prop("checked");
    var jRows = $('table tbody tr:not(.ui-tableFilter-hidden)');
    jRows.find("td.small input:checkbox").prop("checked",checkedStatus);
});

在上面的代码中,IF检查和EACH循环是不相关的。IF将在某个点求值为true,然后每个循环将遍历与选择器匹配的所有复选框,而不管您在IF中选中了什么

试试这样吧

$('table tbody tr')each(function(){
    if(!$(this).hasClass('ui-tableFilter-hidden')){
           $(this).find("td.small input:checkbox").each(function() {
                this.checked = checkedStatus;
            });
        }
    }

你能把一个JSFIDLE放在一起吗?你还应该在你的答案中使用change事件。我最后用$('input[type=checkbox]:visible')编辑了我的代码,以反映你想要的行没有这个类的事实。不过,你的方法更简单!只需确保使用更改事件。无需在行之间循环——正如OP自己发现的那样,您可以使用:visible伪选择器,或者正如我发布的那样,您可以搜索所有行,而不必隐藏类
ui tableFilter
$("input:checkbox.checkall").change(function(){
    var jCheckAll = $(this);
    var checkedStatus = jCheckAll.prop("checked");
    var jRows = $('table tbody tr:not(.ui-tableFilter-hidden)');
    jRows.find("td.small input:checkbox").prop("checked",checkedStatus);
});
$('table tbody tr')each(function(){
    if(!$(this).hasClass('ui-tableFilter-hidden')){
           $(this).find("td.small input:checkbox").each(function() {
                this.checked = checkedStatus;
            });
        }
    }