我想在这样的元素注册事件:如何在尚不存在的元素上注册事件?
$(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