如何克隆jQuery Listen插件事件?

时间:2008-12-10 17:58:13

标签: jquery jquery-plugins clone listen

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

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

执行以下操作:

  • 将这些<tr>复制到另一个表格
  • 保留<tr>内图片上的点击事件(由于true参数)

所有这一切都很好。现在我已经向<tr>添加了jQuery Listen个事件,因此用户无需精确瞄准:他/她可以点击<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不会复制克隆元素上的事件,但this plugin会这样做。

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

1 个答案:

答案 0 :(得分:1)

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。它会 还在工作。“