Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何克隆jQuery侦听插件事件?_Jquery_Jquery Plugins_Clone_Listen - Fatal编程技术网

如何克隆jQuery侦听插件事件?

如何克隆jQuery侦听插件事件?,jquery,jquery-plugins,clone,listen,Jquery,Jquery Plugins,Clone,Listen,我的页面上有一些元素,每个元素中都有一个click()事件附加到一个图像上。我使用这个代码 $(this).clone(true).appendTo("table#foo"); 要执行以下操作: 将这些复制到另一个表中 保留s内图像上的单击事件(因为true参数) 所有这些都很好。现在,我在这些中添加了一个事件,这样用户就不必精确瞄准:他/她可以单击上的任何位置,我可以将单击传递到图像 代码是这样的: $('tr.record').listen('click','td'

我的页面上有一些
元素,每个元素中都有一个
click()
事件附加到一个图像上。我使用这个代码

$(this).clone(true).appendTo("table#foo");
要执行以下操作:

  • 将这些
    复制到另一个表中
  • 保留
    s内图像上的单击事件(因为
    true
    参数)
所有这些都很好。现在,我在这些
中添加了一个事件,这样用户就不必精确瞄准:他/她可以单击
上的任何位置,我可以将单击传递到图像

代码是这样的:

$('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通过电子邮件向我提出了以下建议:

“我认为这可以用另一种方式来解决。倾听(和 事件委派)实际上是为了避免对事件的所有复制 新元素。”

“您可以简单地执行以下操作:”

“甚至:

第一个示例将使用表作为侦听器。在第二个示例中 使用了
标记。因此,无论您添加新的td/tr/表,它都将
listen()插件的创建者Ariel Flesler通过电子邮件给了我以下建议:

“我认为这可以用另一种方式来解决。倾听(和 事件委派)实际上是为了避免对事件的所有复制 新元素。”

“您可以简单地执行以下操作:”

“甚至:

第一个示例将使用表作为侦听器。在第二个示例中 使用了
标记。因此,无论您添加新的td/tr/表,它都将 仍然有效。”

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