我习惯使用.click()
和delegate('click')
,所以当我读到这两个版本在jQuery的最新版本中都被弃用时,我以为我已经阅读了它,但我正在摸不着头脑一点。
文档here似乎表明这是.live()和.delegate()的替代品,但.click()和.bind()有不同的行为,即绑定到当前存在的对象,其他对象绑定到与DOM的生命周期相匹配的选择器模式的任何对象。
在大多数情况下,这不会产生很大的不同,但是当动态地向DOM添加元素时,这是一个重要的区别。与旧模式匹配的新对象 not 使用click
将侦听器与.click()
事件绑定,但将与.delegate()
绑定。< / p>
我的问题是,如何使用.on()
方法复制预先存在的.delegate()
和.bind()
的行为?或者未来的一切都是.delegate()
风格?
答案 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
方法可以替换bind
和delegate
,具体取决于它的使用方式(以及click
可以取代bind
):
.click(handler) == .on('click', handler)
.bind('click', handler) == .on('click', handler)
.delegate('click', '#id', handler) == .on('click', '#id', handler)
click
,delegate
或bind
方法尚未进入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}}。