2013-02-26 24 views
7

據我所知,click()方法不適用於我,因爲我點擊的元素在頁面加載時不存在(DOM準備)。on()vs live()單擊還不存在的元素的功能

我發現很多答案建議使用.live('click',function(){...})。這很好用!

然而,.live()折舊爲jQuery的1.7

所以,我一直在使用.on('click',function(){...}),而不是嘗試過,但它並沒有正常工作(的作用一樣.click()

有誰知道爲什麼,或者我可以做什麼用.on()同樣.live()(工作)?

+0

@ wrschneider99是的! – 2013-02-26 15:18:44

回答

20

由於on()取代了bind()live(),你需要傳遞一個第三個參數,以便利用事件代表團(換句話說,使它像老live()工作):

$('#container').on('click', '.element', function(){ }); 
+1

謝謝,如果'#container'和'.element'是同一個元素呢?我試過在兩個地方使用相同的元素,但沒有運氣:/ – 2013-02-26 15:17:42

+2

@iight然後它不會工作。 '#容器'不能動態生成。正如j08691所說,選擇一個儘可能靠近動態添加元素的環繞元素來提高性能。 – Johan 2013-02-26 15:19:43

+0

必須是父元素,但是,對嗎? – 2013-02-26 15:20:03

7

您應該能夠使用這樣的格式:

$(document).on('click','element', function(){...}); 

哪裏element是你要綁定的元素點擊事件。使用document是一種最糟糕的情況,因爲您理想情況下希望使用在DOM層次結構中更接近要動態加載的元素時所存在的元素。

從jQuery .on()文檔:

的事件處理程序僅結合到當前選擇的元素;在代碼調用.on()時,頁面上必須存在 。 要確保元素存在並且可以選擇,請在頁面上的HTML標記中的 HTML標記中對元素執行文檔就緒處理程序內的事件 綁定。如果新頁面被注入頁面, 選擇元素並附加事件處理程序,當新的HTML被放置到頁面中時,頁面中的內容爲 。

+1

謝謝!這有效,但現在我只需要研究整個$(文檔)綁定。這確實解決了這個問題! – 2013-02-26 15:17:21

相關問題