【发布时间】:2013-03-06 23:14:01
【问题描述】:
我觉得很奇怪.on() 函数在 ajax 加载时只触发一次/两次事件。
这是一个示例代码:
$(document).on('click', '.cbxCheckAll', function(e) {
alert(this.checked);
$(this).parents('table').find('input.cbxDelete:checkbox').attr('checked', this.checked);
});
场景: 所以基本上,我有一个包含用户列表的下拉列表。在下拉列表中选择用户后,它会立即通过 ajax 在 div 上加载所选用户的信息。然后在那个 div 上,我有多个带有“全选”选项的复选框。
点击“全选”后,它确实选择了所有复选框。再次单击,它没有选中复选框。嗯,它确实奏效了。但是当我再次单击(第三次)时,它不再起作用了。似乎它只适用于第二次点击。
您可能注意到,我有一个alert(),它显示“全选”复选框的值。每次我点击它时它似乎都会触发(第 3 次、第 4 次等),但检查/取消检查部分不是。
我最近刚刚将我的 Jquery 版本更新到了最新版本 (1.9)。我正在使用带有.live() 函数的版本(1.7)并将其更改为.on(),因为最近删除了.live()。
提前致谢!
【问题讨论】:
-
确保使用
console.log()而不是alert() -
正如@Dom 所说,alert 持有线程,console.log 让它继续运行。
-
(可能)与您的问题无关,但“.parents('table')”选择了该元素的每个表祖先。如果你尝试“.closest('table')”,你只会选择最近的'table'祖先。