如何克隆 jQuery Listen 插件事件?
-
21-08-2019 - |
题
我有一些 <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。它仍然可以工作。”
不隶属于 StackOverflow