Jquery 为什么没有身体的点击不起作用

Jquery 为什么没有身体的点击不起作用,jquery,jquery-plugins,Jquery,Jquery Plugins,我在页面上有多个myclass类,我使用ajax附加了更多的myclass类 如果我这样做 $('.myclass').click(function(){ alert(1); }); 它适用于所有非ajax附加的请求,但不适用于ajax附加的类。 对于那些工作 $(body).on('click','myclass',function(){ alert(1); }); 我的问题是,为什么会这样???可以简单解释一下 当您使用普通事件注册模型时,它会将处理程序直接注册到在处

我在页面上有多个myclass类,我使用ajax附加了更多的myclass类

如果我这样做

$('.myclass').click(function(){
          alert(1);
});
它适用于所有非ajax附加的请求,但不适用于ajax附加的类。 对于那些工作

$(body).on('click','myclass',function(){
alert(1);
});

我的问题是,为什么会这样???

可以简单解释一下

当您使用普通事件注册模型时,它会将处理程序直接注册到在处理程序注册执行时dom中存在的目标。因此,稍后动态添加的元素将不会获得这些处理程序

解决方案是使用事件委派,在这个模型中,处理程序注册到一个祖先元素,当页面加载选择器以过滤掉源元素时,该祖先元素将出现。这利用了事件传播——在一个元素中发生的事件被传播到所有的祖先元素(很少有像焦点事件这样的异常)。因此,在元素中发生的事件会传播到其中一个元素中的祖先元素。处理程序被注册,然后事件源元素(event.target)及其祖先与作为第二个参数传递的选择器匹配,如果满足该条件,则执行处理程序。

可以提供一个简短的解释

当您使用普通事件注册模型时,它会将处理程序直接注册到在处理程序注册执行时dom中存在的目标。因此,稍后动态添加的元素将不会获得这些处理程序

解决方案是使用事件委派,在这个模型中,处理程序注册到一个祖先元素,当页面加载选择器以过滤掉源元素时,该祖先元素将出现。这利用了事件传播——在一个元素中发生的事件被传播到所有的祖先元素(很少有像焦点事件这样的异常)。因此,在元素中发生的事件会传播到其中一个元素中的祖先元素。处理程序被注册,然后事件源元素(event.target)及其祖先与作为第二个参数传递的选择器匹配,如果满足该条件,则执行处理程序。 请尝试以下代码:

$('.myclass').on("click", function(){
      alert(1);
});
Live用于将事件委托给元素,即使这些元素在dom中仍然不存在,请尝试以下代码:

$('.myclass').on("click", function(){
      alert(1);
});

Live用于将事件委托给元素,即使这些元素在dom中仍然不存在,第一个方法会迭代处理程序执行时存在的元素,因此在执行时找到的任何内容都会被绑定

$('.myclass').click(function(){
          alert(1);
});
这使得在此点之后创建的元素可以单独处理

使用事件委派(您列出的第二种方法),您可以使用所需的选择器管理DOM中存在的所有元素

$(body).on('click','myclass',function(){
    alert(1);
});

如果您希望将动态元素添加到页面中,那么使用事件委派的解决方案将允许您处理所有元素,而不管它们是在何时创建的。

第一个方法迭代处理程序执行时存在的元素,因此在该时间找到的任何内容都是绑定的

$('.myclass').click(function(){
          alert(1);
});
这使得在此点之后创建的元素可以单独处理

使用事件委派(您列出的第二种方法),您可以使用所需的选择器管理DOM中存在的所有元素

$(body).on('click','myclass',function(){
    alert(1);
});

如果您希望将动态元素添加到页面中,那么使用事件委派的解决方案将允许您处理所有元素,而不管它们是在何时创建的。

您可能需要考虑离开jQuery方法。它从1.7开始被弃用,并在1.9中被删除。请改用“on”。。。XD您可能需要考虑离开jQuery方法。它从1.7开始被弃用,并在1.9中被删除。请改用“on”。。。除息的