我通过JS在DOM上创建元素。问题是,如何为每个新创建的元素分配.change()函数?
从性能角度来看,比.live()
更好的选择是.delegate()
。它与.live()
的工作方式相同:使用事件冒泡,也就是当在DOM元素上触发事件时,其所有父级都会被通知该事件。但是, delegate
具有更好的语法和显著的性能优势。
$('#parentElement').delegate('select.yourSelectClass', 'change', function() {
// do your processing here
});
#parentElement
可以是匹配所有你要添加的 select
元素的共同祖先元素的任何选择器。这可能是 document.body
,但 DOM 树中可能会有另一个元素可以绑定到。
select.yourSelectClass
意味着此处理函数只会在带有类名为yourSelectClass
的 select 元素上触发。你可以更改此选择器以使用其他 jQuery 选择器语法。
jQuery.live()
成为你的朋友:$('.yourSelectClass').live('change', function(event){
// Handle the Change event here.
});
使用jQuery live。(版本1.3或更高)
$(".classOfJSCreatedElements").live('change',
function(event){
//do stuff
});
如果你必须使用旧版本的jQuery,请使用livequery插件
来源:jQuery常见问题解答