【问题标题】:jquery .click not working = jquery .on(click...) working finejquery .click 不工作 = jquery .on(click...) 工作正常
【发布时间】:2013-07-16 13:54:56
【问题描述】:

几周前,我正在处理我的项目并编写了一些代码来使表格行可点击(去过那里,做到了)。 此代码以前使用过,没有问题。浪费了一天时间试图让代码工作(即使我之前已经做过多次) - 我试图让它工作的一些事情是 a - 将所有内容的 id 更改为 class, b - 将代码从脚本部分的底部移动到顶部,c - 重命名变量,d - 在变量前面添加“var”,减去var from 在变量前面,e - 将所有单引号改为双引号,将所有双引号改为单引号,f - 更改表名,g - 尝试点击表格而不是行,h - 将表格放入 div 中,将表格从 div 中取出,等等等等。

没有什么是成功的,所以作为最后的手段,深夜,我将 .click 切换到 .on(click - 出乎意料的惊喜 - 一切正常。

昨天发生了同样的事情,但我没有做 a - h ,而是直接将 .click 更改为 on(click.

这里是sn-ps的两个代码:

$("#mdtable tr").click(function() { 
    var localmdid = $(this).find("#mdid").html();
    alert("mdid =" + localmdid);
});

$(document).on('click', '#mdtable tr', function(e) {
    var localmdid = $(this).find("#mdid").html();
    alert("mdid =" + localmdid);
           });

上面的永远不工作,下面的总是有效(我评论他们)。

这是来自另一个页面的代码 sn-p 可以正常工作:

$("#patienttable tr").click(function() {
       var passthis = $(this).find("#localid").html();
       $.post("php/setsessionvariable.php",
              {sessionval: passthis},
              function(e) {window.location.href = "root.php"}
              );
});

我已经阅读了 jQuery 文档,它说 .click 函数在某种程度上与 .on(click 直接相关,因此对我来说,如果一个有效,那么另一个应该有效。

作为一个菜鸟,我想成为一个更好的程序员,尽管我的代码可以使用 .on(click,但我想知道为什么我的 .click 不起作用(智力练习)。

所以我的问题是:

  1. .click 和 .on(click 真的相关吗?

  2. 我在 click sn-p 中遗漏了什么明显的东西,使其无法正常工作?

  3. 关于这个问题有什么不同的方法吗?

再次感谢您

【问题讨论】:

  • api.jquery.com/on 阅读有关直接事件和委托事件的信息。
  • @j08691 我会说是的,因为第一个不起作用
  • $('foo').click(...)$('foo').on('click, ...)等效。但是您使用不同的选择器/元素将处理程序绑定到(在第一种情况下为#mdtable tr,在第二种情况下为document),因此它们在您的情况下不等价。您正在使用 事件委托,这在 jQuery 学习中心得到了很好的解释:learn.jquery.com/events/event-delegation.
  • @roasted - 我很确定我知道答案,我只想得到 OP 的确认。
  • @Kathiravan 这显然是错误的。区别不在于click()on(),而在于事件是否委托on() 允许您创建直接和委托事件,而 click() 只允许前者。

标签: jquery onclick click


【解决方案1】:

.click 将点击事件绑定到当时存在于DOM 中的元素,而on() 将委托事件并绑定稍后动态添加的点击(事件)。

委托活动

委托事件的优点是它们可以处理来自 以后添加到文档中的后代元素。经过 选择一个保证在该时间存在的元素 附加了委托事件处理程序,您可以使用委托事件 避免频繁附加和删除事件处理程序的需要,Reference

【讨论】:

  • 更具体地说,在提供的代码中,on 将事件绑定到document。以后不会添加这些事件。
  • 是的……那是我的问题……如上所述,在加载 DOM 之后,通过单击和 ajax 调用加载不工作的东西。非常感谢!
猜你喜欢
  • 1970-01-01
  • 2011-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-19
  • 2013-10-23
  • 1970-01-01
相关资源
最近更新 更多