我想在這樣的元素註冊事件:如何在尚不存在的元素上註冊事件?
$(document).ready(function() {
$('.classname').change(function(){
alert ('This line is never triggered');
});
});
但問題是,.classname元素以後加載到阿賈克斯的DOM。那麼,在這種情況下,我如何正確地註冊一個事件呢?是否有可能(?不是新出現的元素,每次我的意思是,)
我想在這樣的元素註冊事件:如何在尚不存在的元素上註冊事件?
$(document).ready(function() {
$('.classname').change(function(){
alert ('This line is never triggered');
});
});
但問題是,.classname元素以後加載到阿賈克斯的DOM。那麼,在這種情況下,我如何正確地註冊一個事件呢?是否有可能(?不是新出現的元素,每次我的意思是,)
繼答案建議你使用live()
,它也可以使用delegate()
,例如:
$('form').delegate('.classname', 'change', function(){
alert("This will alert when the newly-added element registers a 'change' event.");
});
對於delegate
元素的選擇(.classname')
到分配,在這種情況下,$('form')
在分配時必須存在於DOM中
編輯需要注意的是以下部分(以下接下來的「編輯」,直到「參考」)是錯誤:
由delegate()
選擇器和目標到其中事件是delegate()
-d 選擇的元件之間的元件上調用stopPropagation()
確實有所預見的(之前雖然我沒有意識到這一點)防止委託的發生。
編輯響應質疑,在註釋中,從OP:
嘿,剛剛注意到,如果任何父的事件處理程序調用stopPropagation,然後現場活動將停止!它是否正確?
不按照jQueryAPI(條目被鏈接到下圖):由.delegate()
處理
......活動將一直傳播到元素它們所委派。 ..
我還沒有嘗試/驗證了這一點尚未,但似乎即使該目標元素($('.classname')
)和delegate()
-d元素($('form')
)之間的坐鎮元話費stopPropagation()
它不該」對delegate()
有不利影響。
參考:
必須使用on()活(做一次)被棄用:
$(document).ready(function() {
$(document).on('change', '.classname', function(){
alert ('This line is never triggered');
});
});
使用live
結合該事件現在和將來的所有元素:
$(document).ready(function() {
$('.classname').live('change',function(){
alert ('This line is never triggered');
});
});
富勒更多信息,看看在documentation here。
+1:不錯的選擇:o) –
爲什麼,謝謝你親切! =) –
嘿,剛剛注意到,如果任何父母的事件處理程序調用stopPropagation,那麼現場活動將停止!它是否正確? – Dziamid