1

我的页面上有一些<tr>元素,其中一个click()事件附加到每个元素内部的图像上。我使用此代码

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

执行以下操作:

  • 将那些 s 复制<tr>到不同的表中
  • 保留<tr>s 内图像上的点击事件(由于true参数)

所有这些工作正常。现在我为这些 s 添加了一个jQuery Listen事件<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() 插件的作者提出了不同的策略 - 请参阅下面的答案。

4

1 回答 1

1

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

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

“你可以简单地做:”

$('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。它仍然可以工作。”

于 2008-12-13T22:59:58.907 回答