【问题标题】:Jquery ON function firing only once or twice only on ajax loadJquery ON 函数仅在 ajax 加载时触发一次或两次
【发布时间】: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'祖先。

标签: jquery ajax live


【解决方案1】:

在处理checked 属性时,您必须在最新版本的jQuery 中使用.prop()

$(document).on('click', '.cbxCheckAll', function(e) {
    //alert(this.checked);
    console.log(this.checked);
    $(this).parents('table').find('input.cbxDelete:checkbox').prop('checked', this.checked);
});

【讨论】:

  • 谢谢凯文 B!!!这完美!只是想知道,为什么我上面的代码不起作用?我在 jquery 1.7 版本中使用它,它运行良好。但是现在我升级到 1.9 就不行了?
  • 是的,这就是它只工作两次的原因,尽管我从逻辑上不完全确定它为什么会发生。 1.9 切换回 1.6 中引入并在 1.6.1 中删除的更严格的 .attr/.prop你以一种意想不到的方式使用它。
  • 谢谢凯文。我刚刚看到一个关于 attr 与 prop 的讨论。你们也可以查一下。大量阅读。 link
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-05-28
  • 2013-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-01
  • 1970-01-01
相关资源
最近更新 更多