添加实时功能以在jQuery中动态添加元素

时间:2011-09-28 09:52:53

标签: jquery-plugins jquery

我在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添加到动态添加的元素不起作用?

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

live()需要检查父元素上的事件是否有效。您设置它的方式,事件不能传播到任何父元素。

答案 1 :(得分:1)

由于live()的工作方式:

  

.live()方法能够影响尚未存在的元素   通过使用事件委托添加到DOM:处理程序绑定   祖先元素负责触发的事件   它的后代。传递给.live()的处理程序永远不会绑定到   元件;相反,.live()将一个特殊的处理程序绑定到。的根   DOM树。在上面的示例中,单击新元素时,   发生以下步骤:生成单击事件并将其传递给    处理。没有处理程序直接绑定到,所以   事件冒泡DOM树。事件一直持续到达   树的根,这是.live()绑定它的特殊之处   处理程序默认情况下。   *从jQuery 1.4开始,事件冒泡可以选择在DOM停止   元素“上下文”。由.live()绑定的特殊单击处理程序   执行。此处理程序测试要查看的事件对象的目标   是否应该继续。通过检查是否执行此测试   $(event.target).closest(“。clickme”)能够找到匹配项   元件。如果找到匹配元素,则原始处理程序为   呼吁它。因为直到第5步才执行步骤5中的测试   事件发生时,元素可以随时添加并仍然响应   事件

生命不会将事件绑定到对象,它会将监听器附加到窗口,然后当事件冒泡时,它会检查原始目标。所以你不要把它添加到新对象。