jQuery on()方法不像live()那样绑定事件

jQuery on()方法不像live()那样绑定事件,jquery,Jquery,如上所述: 从jQuery1.7开始,不推荐使用.live()方法。使用.on()附加事件处理程序 对因此而不是 $('.dynamicallyCreatedElement').live('click', function(){ console.log('click'); }); 我应该使用: $('.dynamicallyCreatedElement').on('click', function(){ console.log('click'); }); 但是,它不会将事件绑定到调用

如上所述:

从jQuery1.7开始,不推荐使用.live()方法。使用.on()附加事件处理程序

因此而不是

$('.dynamicallyCreatedElement').live('click', function(){
  console.log('click');
});
我应该使用:

$('.dynamicallyCreatedElement').on('click', function(){
  console.log('click');
});
但是,它不会将事件绑定到调用
on()
后创建的元素。那么它真的更好吗
live()
方法

我遗漏了什么吗?

要以与工作相同的方式使用,您需要像这样使用它:

$(document).on("click", ".dynamicallyCreatedElement", function() {   
    console.log('click'); 
});  
因此,您将上的
处理程序绑定到
文档
本身(或者,实际上是新元素将“出现”的容器元素——感谢@devnull69的澄清),然后将事件类型和选择器传递给它

您将在文档页面的中间找到几个示例。

用作委托()

$('#closestStaticParent').on('click', '.dynamicallyCreatedElement' function(){
    console.log('click');
});

编辑:只要每个人都能得到它,当使用delegate()时,选择器是第一个参数,on()是第二个参数。

我发现有必要在on上使用这种方法:

$('#container').on('click','.dynamicallyCreatedElement',function(){
    console.log('click');
});

如果您只是在链接到的文档(第三段)中进一步阅读,则可能重复:“
.live()
方法及其后续方法的重写非常简单;这是所有三个事件附件方法的等效调用模板:
$(document).on(事件、选择器、数据、处理程序);//jQuery 1.7+
“@FelixKling谢谢你,以前没有找到。很高兴你问这个问题。经常有人建议它们是相同的,但实际上它们不是(在我看来,这是一个恼人的变化)。
.delegate()
实际上期望选择器作为第一个参数,第二个作为事件。因此,它们的参数顺序不同。是的,但概念是相同的。它不一定是
$(文档)
。第一个选择器可以是动态创建的元素的任何现有父元素/容器元素OK,true,只要新元素将出现在该父元素/容器中。-我已经更新了我的答案;谢谢。确实,您应该尽量避免使用
$(文档)。在这些情况下,(…)
上,因为这在过去的Safari浏览器中造成了问题,
单击
事件不会一直冒泡到
文档
:当主体加载为空,然后动态加载所有内容时,'on()“函数对我来说似乎总是有问题,因为‘live()’一直工作得很好。当一切都是动态的时,“on()”函数是一个很好的工具!在这种情况下,与上面提到的@devnull69相反,它只在我使用“$(document)”时起作用。。。。这与我上面所说的并不矛盾:——)
$('#container').on('click','.dynamicallyCreatedElement',function(){
    console.log('click');
});