jQuery Checkall复选框

时间:2011-10-23 23:11:11

标签: jquery checkbox

我无法通过此复选框检查未隐藏的复选框

Basiclly我需要它不检查表中隐藏的任何复选框

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

快速解决方法是用上面的代码替换上面的代码

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

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

});

2 个答案:

答案 0 :(得分:1)

您的IF检查和EACH循环在上面的代码中是无关的。 IF将在某个时刻评估为true,然后EACH循环将遍历与选择器匹配的所有复选框,无论您在IF中检查了什么。

尝试这样的事情......

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

答案 1 :(得分:0)

理想情况下,您应该使用更改事件,因为输入可以更改而不仅仅是点击。您也可以找到ui-tableFilter-hidden的所有行,然后选中相应的复选框。我还使用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);
});