2011-09-28 103 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不會將事件綁定到對象,它會將偵聽器附加到窗口,然後當事件冒泡時它會檢查原始目標。所以你不要把它添加到新對象中。