2011-09-28 107 views
1

我做的jQuery插件元素:添加直播功能,动态添加元素的jQuery

this.addButton = $("<a>", { 
        text: "ADD", 
        "class": "addButton" 
       }).appendTo(this.element); 

然后,添加实时功能:

this.addButton.live("click", function() { 
      that.somefunction("addSomething"); 
     }); 

而且它不工作。

如果我变“活”,以“绑定”有用,或者当我这样做:

$('.addButton').live("click", function() { 
    that.somefunction("addSomething"); 
}); 

它也能工作。但为什么添加动态添加元素不起作用?

任何想法?

回答

1

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

+0

谢谢。现在我明白了。 –

1

因为这样live()作品:

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

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