我有一些 <tr> 我的页面上的元素 click() 事件附加到位于每个图像内的图像。我用这个代码

$(this).clone(true).appendTo("table#foo");

执行以下操作:

  • 复制那些 <tr>进入不同的表
  • 保留图像上的点击事件 <tr>s(因为 true 争论)

所有这些都运行良好。现在我添加了一个 jQuery 监听 事件给那些 <tr>s,这样用户就不必精确瞄准:他/她可以点击 <tr> 我可以将点击传递给图像。

它的编码是这样的:

$('tr.record').listen('click','td',function(){
  $(this).parent().find("img.clickable").click();
});

Listen() 事件在原始项目上工作正常,但是 在克隆的项目上,listen() 事件失败。 图像的点击事件仍然可以正常工作。

Firebug 告诉我的是:

m(this, e.type) is undefined

...它引用了 jquery.listen-1.0.3-min.js 的第 9 行。

如何使listen() 事件对克隆元素起作用?

更新

默认情况下,jQuery 不会复制克隆元素上的事件,但是 这个插件 就是为了这样做而设计的。

同时,listen() 插件的作者提出了一种不同的策略 - 请参阅下面的我的答案。

有帮助吗?

解决方案

Listen() 插件的创建者 Ariel Flesler 通过电子邮件给了我这个建议:

“我认为这可以通过另一种方式解决。聆听(和事件委托)的想法实际上是为了避免为新元素的所有事件复制。”

“你可以简单地这样做:”

$('table#foo').listen('click','td',function(){
 $(this).parent().find("img.clickable").click();
});

“甚至:”

$.listen('click','td',function(){
 $(this).parent().find("img.clickable").click();
});

“第一个示例将使用表作为监听器。在第二个中,<html> 使用标签。所以无论您是否添加新的 td/tr/tables。它仍然可以工作。”

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top