jQuery .on(’click’)与.click()和.delegate(’click’)

我习惯使用.click()delegate('click') ,所以当我读到两个在最近的jQuery版本中都被弃用时,我以为我已经阅读了它,但是我有点嗤之以鼻。

这里的文档似乎表明这是.live()和.delegate()的替代品,但.click ()和.bind()有不同的行为,即绑定到当前存在的对象,其他的绑定到任何与DOM的生命周期相匹配的选择器模式的对象。

在大多数情况下,这不会产生很大的不同,但是当动态地向DOM添加元素时,这是一个重要的区别。 与旧模式匹配的新对象不会使用.delegate() 侦听器绑定到click事件,而是使用.delegate()

我的问题是,如何使用.on()方法复制预先存在的.delegate().bind() ? 或者未来的一切都将转向.delegate()风格?

两种模式仍然受支持。

以下调用bind()

 $(".foo").bind("click", function() { // ... }); 

可以直接转换为以下对on()调用:

 $(".foo").on("click", function() { // ... }); 

以下调用delegate()

 $("#ancestor").delegate(".foo", "click", function() { // ... }); 

可以转换为以下对on()调用:

 $("#ancestor").on("click", ".foo", function() { // ... }); 

为完整起见,以下调用live()

 $(".foo").live("click", function() { // ... }); 

可以转换为以下对on()调用:

 $(document).on("click", ".foo", function() { // ... }); 

on方法可以替换binddelegate具体取决于它的使用方式(也可以click bind作为替换):

 .click(handler) == .on('click', handler) .bind('click', handler) == .on('click', handler) .delegate('click', '#id', handler) == .on('click', '#id', handler) 

clickdelegatebind方法都没有进入已弃用的页面 。 我怀疑click方法会如何。

您可以从源代码中推断出别名的用法。

 console.log($.fn.delegate); function (a, b, c, d) { return this.on(b, a, c, d); } console.log($.fn.bind); function (a, b, c) { return this.on(a, null, b, c); } 

该文档还提供了用法示例:

 $(elements).delegate(selector, events, data, handler); // jQuery 1.4.3+ $(elements).on(events, selector, data, handler); // jQuery 1.7+ 

.delegate().bind()使用on方法。 而.on()也是.on()的快捷方式 。