Javascript jquery函数不能处理异步加载的dom元素

Javascript jquery函数不能处理异步加载的dom元素,javascript,jquery,ajax,asynchronous,Javascript,Jquery,Ajax,Asynchronous,我在DOM元素上编写了jQuery事件处理程序,这些元素尚未在页面中,但可以异步加载到页面中。我观察到的是,这些事件处理程序似乎没有意识到一些新元素被添加到了DOM,它们需要在触发时对它们进行操作 我的观察正确吗?如何实现此功能?如果希望事件处理程序处理动态添加的内容,则需要在 $(document).on("click", "someCssSelector", function(){ //your code here }); 当然,这将导致您页面上任何地方的所有点击都被监视。为了提高

我在DOM元素上编写了jQuery事件处理程序,这些元素尚未在页面中,但可以异步加载到页面中。我观察到的是,这些事件处理程序似乎没有意识到一些新元素被添加到了DOM,它们需要在触发时对它们进行操作


我的观察正确吗?如何实现此功能?

如果希望事件处理程序处理动态添加的内容,则需要在

$(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() {
    ...
});