Javascript jquery函数不能处理异步加载的dom元素
我在DOM元素上编写了jQuery事件处理程序,这些元素尚未在页面中,但可以异步加载到页面中。我观察到的是,这些事件处理程序似乎没有意识到一些新元素被添加到了DOM,它们需要在触发时对它们进行操作Javascript jquery函数不能处理异步加载的dom元素,javascript,jquery,ajax,asynchronous,Javascript,Jquery,Ajax,Asynchronous,我在DOM元素上编写了jQuery事件处理程序,这些元素尚未在页面中,但可以异步加载到页面中。我观察到的是,这些事件处理程序似乎没有意识到一些新元素被添加到了DOM,它们需要在触发时对它们进行操作 我的观察正确吗?如何实现此功能?如果希望事件处理程序处理动态添加的内容,则需要在 $(document).on("click", "someCssSelector", function(){ //your code here }); 当然,这将导致您页面上任何地方的所有点击都被监视。为了提高
我的观察正确吗?如何实现此功能?如果希望事件处理程序处理动态添加的内容,则需要在
$(document).on("click", "someCssSelector", function(){
//your code here
});
当然,这将导致您页面上任何地方的所有点击都被监视。为了提高效率,请查看是否可以对页面进行结构调整,以便所有这些元素的单击事件都位于一个容器中。也就是说,如果所有这些元素都要添加到id为foo
的div中,那么您可以更高效地编写上述内容
$("#foo").on("click", "someCssSelector", function(){
//your code here
});
如果您使用的是jQuery<1.7,那么应该使用delegate
$(document).delegate("someCssSelector", "click", function(){
//your code here
});
我的观察正确吗
对
如何实现此功能
如果使用jQuery 1.7+,则使用该函数订阅这些事件处理程序:
$(document).on('click', '.someSelector', function() {
...
});
或者,如果您使用的是旧版本(高于1.4.3),则使用该功能:
例如,如果您知道这些元素将被添加到某个容器中,那么您可以使用比document
更具体的根来提高性能
如果你使用的是史前版本,你可以选择:
@SLaks-我要说:)@SLaks root在这里是什么意思?@AdamRackis有没有办法告诉js,它应该始终全局检查所有加载的DOM元素,而不是在每个事件函数中使用“on”?请参阅另一个问题,了解如何使用.on()解决此问题的jQuery选项的详细说明
或.delegate()
。
$(document).delegate('.someSelector', 'click', function() {
...
});
$('.someSelector').live('click', function() {
...
});