2010-12-14 126 views
12

我已經產生了用jQuery一些HTML鏈接,並將其添加到一些DIV 但它接縫,我不能調用點擊方法現在,當這些元素被添加(它的工作確定的時候被硬編碼到HTML) $('#something a').click(function() ...jQuery的點擊附加元素

有誰知道一個解決方案?

回答

21

使用.delegate()對於這些情況:

$('#something').delegate('a', 'click', function() { 

這個高度上#something一個click處理程序,而不是方向內<a>元素...所以它適用於後來追加的錨。 (有幾個原因更糟)版本的另一種方法是.live()這樣的:

$('#something a').live('click', function() { 
+0

@Nick - 爲什麼用活更糟?只是好奇,因爲我用了很多。 – Josh 2010-12-14 18:26:19

+0

@Nick - 我真正感興趣的 - 請你爲什麼.live()是糟糕的原因發表評論。乾杯! – 2010-12-14 18:26:55

+4

@Josh,@Jakub - 用'.live()',讓我們看看上面的代碼 - '$('#a a')'選擇器立即運行,但我們不在乎它發現了什麼......結果被浪費了。另外,因爲它附加到'document',*必須根據該選擇器檢查每個*'click'。隨着'.delegate()'只有非常快'$(「#東西」)'選擇得到運行,而我們使用的結果。也只有從內部'#something'需要進行檢查,因爲他們是在該父籤點擊,所以'.delegate()'地址2個性能的原因...有一個更昂貴的選擇,收益更大。 – 2010-12-14 18:28:16

0

您需要使用直播功能,以確保點擊事件被綁定到已添加到DOM頁面後元素已加載:

$('#something a').live('click',function() ..... 
+0

效果很好,謝謝1 – Dejan 2010-12-14 21:33:35

4

什麼也工作是添加[點擊]事件的附加元素,像這樣的時候:

$('<someElement>').click(function(){ 
    $('<someElement>').append('<htmlCodeToAppend>'); 
    $('<appendedElement>').click(function() { /* do something */ }); 
}); 

這種方法做這項工作,但我不知道我f有任何警告 - 也許其中一個專業人士可能會好好介入。

乾杯, 埃裏克