jQuery触发器('click')不触发复选框上的.click事件
jQuery trigger('click') not firing .click event on checkbox
我有一个表,在标题中有一个check-all复选框,用于检查表中该列中的所有复选框:
<input class="check-all" type="checkbox" id="masterCheck" />
然而,在我的一个页面上,我想在页面加载时自动勾选勾选所有复选框。
为了做到这一点,我尝试触发一个触发器('click')函数,如下所示:
$(document).ready(function () {
if ($("#masterCheck").attr('checked')) {
} else {
$("#masterCheck").trigger('click');
}
});
这可以很好地检查复选框,但不会为类的复选框触发自定义单击事件。检查所有(下图):
$(function () {
$('.check-all').click(function () {
$(this).parents('table:eq(0)').find(':checkbox').attr('checked', this.checked);
});
});
我也试过添加一个Javascript setTimeout,认为自定义点击函数还没有被加载,但它仍然没有在等待1,2,3秒后触发自定义点击函数。
在页面加载时,我可以取消选中我的预先选中的复选框,然后重新选中它,以完美地选中列中的所有复选框。
我必须添加一些特殊的东西到我的jQuery文档。准备好允许它触发自定义单击事件了吗?
* * * EDIT1:
好的,我已经尝试在文档的正上方添加自定义的单击事件。在我的页面上的ready函数,以确保它被加载(因为以前的自定义单击事件是在主.js文件中使用我的_Layout)。除此之外,我已经改变了我的复选框的类,以对应于我的新的自定义点击事件,所以我不会与我的主。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中手动调用click()
的工作方式与实际点击不同。
当您实际单击时,首先复选框状态被更改,然后调用单击处理程序。
当您调用click()
时,首先调用click处理程序,然后更改复选框状态。
当你调用click
时,在你的点击处理程序中,this.checked
仍然是假的。您可以通过将其设置为change
处理程序而不是click
处理程序来修复此问题,如下所示:
$('.check-allx').change(function () {
$(this).parents('table:eq(0)').find(':checkbox').attr('checked', this.checked);
});
参见在jQuery中,为什么通过编程触发'click()'在一个复选框上不立即勾选它?有关实际手动单击和jquery触发的单击之间的差异的更全面的解释。
示例:
$("#recurrence").trigger('click');
以下语句将在复选框状态改变后执行:
$("#recurrence").click(function () {
$(this).change(function(){
if (this.checked) {
$(".recurr-section").show();
} else {
$(".recurr-section").hide();
}
});
});
以编程方式设置选中的属性不会触发相应的单击事件,因此在设置属性时必须添加自己的.trigger('click')
。
好了,考虑到我只需要在单个页面上使用该功能,我选择了简单的方法,避免尝试一起启动自定义单击事件。
今天早上喝完咖啡后,我明白了一些。我添加这段代码是为了解决这个问题。$(document).ready(function () {
$('table#OHTable input[type=checkbox]').attr('checked', 'checked');
});
这只是检查我的表中的所有复选框,当我的masterCheck被点击后,正确的点击事件仍然被触发。
- 如何在angularJS中编辑时,如果DB中的值为true,则设置复选框,如果值为false,则取消选中复选框
- 正在验证8个真/假复选框或复选框中的2个
- 为复选框javascript指定两个值
- 如何在单击复选框后调用控制器方法
- Javascript:函数bind.click&对于每个复选框
- 如何使用ng-click在angularjs控制器中动态地选中/取消选中复选框
- HTML 复选框 Click() 使用 jQuery 返回 FALSE 或 TRUE,而不是 READONLY 或 DI
- $.click() 和 $.trigger() 不会激活复选框的 onchange 函数
- Angularjs,ng-click,如何在MongoDB中放置复选框数组
- 如何使用JQuery更改Click上复选框的值
- 在ng-click中,复选框返回false而不是true
- Angular的复选框输入ng-click从未被调用
- 甚至在调用click处理程序之前,复选框就被选中了
- jQuery触发器('click')不触发复选框上的.click事件
- 在Firefox中,click()设置后不运行复选框.Disabled = false
- 单击输入[复选框]'s标签将触发两次父's click事件(knockout)
- 当单击淘汰表行中的复选框时,tr click事件将覆盖复选框状态更改
- HTMLElement.click()上的复选框在firefox中不起作用
- 在复选框上.click和.change有什么区别?
- 如何创建一个selectAll复选框,并在每个复选框上触发ng-click的每个函数