问题

我有一个表格中的全部复选框,检查表中该列的所有复选框:

<input class="check-all" type="checkbox" id="masterCheck" />

然而,在我的一个页面上,我想自动检查页面加载中的check-all复选框.

为此,我尝试触发一个触发器("click")功能,如下所示:

$(document).ready(function () {
    if ($("#masterCheck").attr('checked')) {
    } else {
        $("#masterCheck").trigger('click');
    }
});

这将勾选复选框,但不会触发我的自定义点击事件,包含类 .check-all (以下)的复选框:

$(function () {
    $('.check-all').click(function () {
        $(this).parents('table:eq(0)').find(':checkbox').attr('checked', this.checked);
    });
});

我还尝试添加一个Javascript setTimeout,认为自定义点击功能还没有被加载,但在等待1秒,2秒和3秒后仍然没有触发自定义点击功能. p>

在页面加载后,我可以取消选中我的预先选中的复选框,并重新检查它,以完美地检查列中的所有复选框.

我必须在Document.ready上添加特殊的jQuery,以使其能够触发自定义点击事件吗?

*** EDIT1:

好的,我试图在我的页面上的document.ready函数上面添加自定义点击事件,以确保它被加载(因为之前的自定义点击事件在我的_Layout中使用的主.js文件中).除此之外,我更改了我的复选框的类,以对应于我的新的自定义点击事件,所以我不与我的主.js文件中的那个冲突.

<input class="check-allx" type="checkbox" id="masterCheck" />


// Check all checkboxes when the one in a table head is checked:
    $(function () { 
        $('.check-allx').click(function () {
            $(this).parents('table:eq(0)').find(':checkbox').attr('checked', this.checked);
            alert(this);
        });
    });
// Check for unchecked masterCheck
    $(document).ready(function () {
        if ($("#masterCheck").attr('checked')) {
        } else {
            //$("#masterCheck").trigger('click');
            $("#masterCheck").click();
        }
    });

这似乎是在自定义点击事件中引发我的警报,这是进步,但是我所有的复选框都不会像他们那样检查无效.注意:我还将触发器('click')更改为.click(),这两者在我的情况下都是一样的.



解决方法

更新:这仅适用于jQuery 1.8及更低版本.这是在jQuery 1.9中修复.

问题是手动调用jQuery中的 click()的工作原理与实际点击不同.

当您实际点击时,首先复选框状态更改,然后调用您的点击处理程序.

当您调用 click()时,首先调用点击处理程序,然后更改复选框状态.

所以当你调用单击时,在你的点击处理程序中, this.checked 仍然是假的.您可以通过使其成为更改处理程序而不是点击处理程序来解决此问题,如下所示:

$('.check-allx').change(function () {
    $(this).parents('table:eq(0)').find(':checkbox').attr('checked', this.checked);
});

请参阅在jQuery中,为什么在一个复选框上以编程方式触发"click()"不能立即检查它?,以便更全面地说明实际手动点击和jquery触发点击之间的区别.




相关问题推荐