2011-07-03 34 views
2

首先,我不希望另一個插件做到這一點...... jQuery已經具備了99%我想用live()方法所需的功能。使用jQuery,如何添加新元素時如何使用「live」方法提醒?

基本上,我想改變這一點:

$(".some-button").live("click", function() { alert('yay!'); }); 

到這一點:

$(".some-button").live(function() { alert('yay!'); }); 

所以,我要說的是,我想火的方法時,馬上一個元素添加到頁面... jQuery已經可以做到這一點SOOO關閉因爲這就是它如何添加「點擊」,即使在我上面的例子!

如何在不添加其他插件的情況下實現此目的,而只需使用與「活」和「死」方法相同的功能呢?

+0

這可能幫助:http://stackoverflow.com/questions/815074/jquery-doesnt-see-new-elements – Kon

回答

2

沒有任何跨瀏覽器的方式來做到這一點,並沒有任何jQuery本身允許它。

您必須使用插件,或者只是手動管理爲新元素調用代碼。

live()[docs]方法和delegate()[docs]方法僅用於事件處理。你給他們的代碼只會響應瀏覽器事件,而不是DOM操作。


原因.live()不會做,這是因爲添加新元素到DOM時,它不會運行任何代碼。它不監視任何DOM更改。相反,它響應冒泡到document的事件,並調用處理程序(如果它與您給它的選擇器相匹配)。

+0

啊,現在我明白了.. 。「live」並不是在添加一個單擊事件處理程序後添加到對象中,而是添加一個「click」到頁面,然後當問題中的元素與條件匹配時,它也會調用那個元素! –

+0

@蒂莫西:確實如此。這是關於'.live()'的常見誤解。這只是整個文件的事件代表團。這就是爲什麼我更喜歡使用'.delegate()',這是完全一樣的,但是讓你讓委託更注重整個文檔。 – user113716

4

下面是一些代碼我複製和粘貼,似乎在擺弄工作,至少在FF:http://jsfiddle.net/KQBzn/

$(document).bind('DOMNodeInserted', function(event) { 
     alert('inserted ' + event.target.nodeName + // new node 
      ' in ' + event.relatedNode.nodeName); // parent 
}); 

來源:http://forum.jquery.com/topic/how-to-get-notified-when-new-dom-elements-are-added

+0

也適用於Chrome。 –

+0

Freackin'真棒!太糟糕了,這不適用於IE8或以下。 – trusktr

0

你不能用.live做() 方法。

看來jQuery應該爲.live()方法添加一個特性,這樣如果它使用特定的關鍵字(如'created')而不是事件名稱,那麼它將允許您爲創建的元素執行一個函數。那很酷!例如,理想的情況是這樣的:

$('.foobar').live('created', function() { 
    // do something with each newly created .foobar element here. 
}); 
相關問題