2011-12-12 103 views
23

我知道.live()現已被棄用但我似乎無法改變它並保持功能。Jquery .on與.live

我只是有一個關於jQuery中的.on()函數的簡單問題。我目前使用.live()here

像這樣:

$('table tr th').live("click", function() { 
}); 

但是,當我嘗試更換.live().on()它不再工作,因爲它是應該。

我試圖把在

$('table tr th').on("click", function() { 
}); 

以及

$('table tr').live("click", "th", function() { 
}); 

$('table tr').delegate("th", "click", function() { 
}); 

,但無濟於事。

這是什麼和我可以採取哪些措施使其正常工作?

+1

可能重複[jQuery的1.7 - 車削現場()插入()](http://stackoverflow.com/questions/8021436/jquery-1-7-turning-live-插入) –

+0

@FelixKling我試圖避免使用'$(document)'來精確地模擬調用。我想知道是否有另一種方法可以做到這一點,這更符合jQuery API網站上的示例。 –

+0

只需取最近的現有元素(祖先)(然後再更對應'.delegate')。 –

回答

31

on()功能需要一個語法更新,你應該改變你的代碼:

$('body').on("click", "table tr th", function()... 

退房本文的詳細信息:http://www.andismith.com/blog/2011/11/on-and-off/

+0

非常真實,我會更新上下文。 –

0

我以某種方式猜測你正在將tr元素添加到你的表格中,而不是th

$('table').on("click", "tr th", function(){}); 
+0

''由一個數組產生並寫入表中的第一個''。你的解決方案不起作用,但... –

+0

這將無法正常工作,他的表被替換爲'.replaceWith()' –

9

試試這個:

$('table tr th').live("click", function() { 

應該

$(document).on("click", "table tr th", function() { 

那你是怎麼會準確地模仿.live電話。您當然可以根據您的DOM結構將您的選擇器從文檔限制到更有意義的內容。

編輯:

只是爲了澄清,在你的榜樣,您需要使用$(document).on(...,因爲該表沒有任何父母和你的頁面的生命過程中被替換。

+0

因此,因爲我在代碼中替換了表,所以我需要使用'$(document)'so這個電話會繼續工作嗎? –

+0

@Andrew:不,層次結構中的任何現有元素都會執行。 –

+0

@FelixKling啊好的,謝謝! –

2

確保所選元素(TH/TR)在最初加載頁面時存在。 如果此選擇器稍後添加到DOM,新的.on將不起作用。

嘗試的

$('body').on('click', 'thesSelectorForYourTriggerElement', function(){ 
    //callback 
});