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
方法可以替换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
方法都没有进入已弃用的页面 。 我怀疑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()
的快捷方式 。