我在jQuery插件中创建了一个元素:
this.addButton = $("<a>", {
text: "ADD",
"class": "addButton"
}).appendTo(this.element);
然后我添加了实时功能:
this.addButton.live("click", function() {
that.somefunction("addSomething");
});
它没有用。
如果我将“live”更改为“bind”,则可以正常工作,或者当我执行时:
$('.addButton').live("click", function() {
that.somefunction("addSomething");
});
它也有效。但为什么将live添加到动态添加的元素不起作用?
有什么想法吗?
答案 0 :(得分:1)
live()
需要检查父元素上的事件是否有效。您设置它的方式,事件不能传播到任何父元素。
答案 1 :(得分:1)
由于live()的工作方式:
.live()方法能够影响尚未存在的元素 通过使用事件委托添加到DOM:处理程序绑定 祖先元素负责触发的事件 它的后代。传递给.live()的处理程序永远不会绑定到 元件;相反,.live()将一个特殊的处理程序绑定到。的根 DOM树。在上面的示例中,单击新元素时, 发生以下步骤:生成单击事件并将其传递给 处理。没有处理程序直接绑定到,所以 事件冒泡DOM树。事件一直持续到达 树的根,这是.live()绑定它的特殊之处 处理程序默认情况下。 *从jQuery 1.4开始,事件冒泡可以选择在DOM停止 元素“上下文”。由.live()绑定的特殊单击处理程序 执行。此处理程序测试要查看的事件对象的目标 是否应该继续。通过检查是否执行此测试 $(event.target).closest(“。clickme”)能够找到匹配项 元件。如果找到匹配元素,则原始处理程序为 呼吁它。因为直到第5步才执行步骤5中的测试 事件发生时,元素可以随时添加并仍然响应 事件
生命不会将事件绑定到对象,它会将监听器附加到窗口,然后当事件冒泡时,它会检查原始目标。所以你不要把它添加到新对象。