我已經產生了用jQuery一些HTML鏈接,並將其添加到一些DIV 但它接縫,我不能調用點擊方法現在,當這些元素被添加(它的工作確定的時候被硬編碼到HTML) $('#something a').click(function() ...
jQuery的點擊附加元素
有誰知道一個解決方案?
我已經產生了用jQuery一些HTML鏈接,並將其添加到一些DIV 但它接縫,我不能調用點擊方法現在,當這些元素被添加(它的工作確定的時候被硬編碼到HTML) $('#something a').click(function() ...
jQuery的點擊附加元素
有誰知道一個解決方案?
使用.delegate()
對於這些情況:
$('#something').delegate('a', 'click', function() {
這個高度上#something
一個click
處理程序,而不是方向內<a>
元素...所以它適用於後來追加的錨。 (有幾個原因更糟)版本的另一種方法是.live()
這樣的:
$('#something a').live('click', function() {
您需要使用直播功能,以確保點擊事件被綁定到已添加到DOM頁面後元素已加載:
$('#something a').live('click',function() .....
效果很好,謝謝1 – Dejan 2010-12-14 21:33:35
什麼也工作是添加[點擊]事件的附加元素,像這樣的時候:
$('<someElement>').click(function(){
$('<someElement>').append('<htmlCodeToAppend>');
$('<appendedElement>').click(function() { /* do something */ });
});
這種方法做這項工作,但我不知道我f有任何警告 - 也許其中一個專業人士可能會好好介入。
乾杯, 埃裏克
@Nick - 爲什麼用活更糟?只是好奇,因爲我用了很多。 – Josh 2010-12-14 18:26:19
@Nick - 我真正感興趣的 - 請你爲什麼.live()是糟糕的原因發表評論。乾杯! – 2010-12-14 18:26:55
@Josh,@Jakub - 用'.live()',讓我們看看上面的代碼 - '$('#a a')'選擇器立即運行,但我們不在乎它發現了什麼......結果被浪費了。另外,因爲它附加到'document',*必須根據該選擇器檢查每個*'click'。隨着'.delegate()'只有非常快'$(「#東西」)'選擇得到運行,而我們使用的結果。也只有從內部'#something'需要進行檢查,因爲他們是在該父籤點擊,所以'.delegate()'地址2個性能的原因...有一個更昂貴的選擇,收益更大。 – 2010-12-14 18:28:16