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

时间:2012-07-02 15:19:35

标签: jquery

我习惯使用.click()delegate('click'),所以当我读到这两个版本在jQuery的最新版本中都被弃用时,我以为我已经阅读了它,但我正在摸不着头脑一点。

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

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

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

4 个答案:

答案 0 :(得分:38)

仍支持这两种模式。

以下对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() {
    // ...
});

答案 1 :(得分:4)

on方法可以替换binddelegate,具体取决于它的使用方式(以及click可以取代bind):

.click(handler) == .on('click', handler)

.bind('click', handler) ==  .on('click', handler)

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

clickdelegatebind方法尚未进入deprecated page。我怀疑click方法会永远。

答案 2 :(得分:2)

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

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);
}

documentation还提供了用法示例:

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

答案 3 :(得分:2)

.delegate().bind()使用on方法。 .click()也是.on()的{​​{3}}。