【发布时间】:2019-12-04 16:01:12
【问题描述】:
我习惯于使用.click() 和delegate('click'),所以当我读到这两个版本在最新版本的 jQuery 中都已弃用时,我以为我会读到它,但我有点摸不着头脑。
文档here 似乎表明这是.live() 和.delegate() 的直接替代品,但.click() 和.bind() 具有不同的行为,即绑定到当前存在的对象,其中在 DOM 的整个生命周期内,绑定到与选择器模式匹配的任何对象的其他对象。
在大多数情况下,这不会产生很大的不同,但是当动态地将元素添加到您的 DOM 时,这是一个重要的区别。与旧模式匹配的新对象不会使用.click()将监听器绑定到click事件,但会使用.delegate()。
我的问题是,如何使用.on() 方法来复制先前存在的.delegate() 和.bind() 的行为?还是未来一切都朝着.delegate()风格发展?
【问题讨论】:
-
阅读documention 以获得
click()。 它没有被弃用。 "...这个方法是一个 shortcut 用于 ....on("click", handler)从 jQuery 1.7 开始。" -
...好的,请允许我改写一下:它被重新利用了。以前是
.bind()的快捷方式,现在不是了。 -
它现在是
.on()的快捷方式,它已取代.bind()用于将事件绑定到现有元素。它还替换了.delegate()用于静态(非文档)元素的事件委托,以及.live()用于整个文档的事件委托。 -
只要使用 .on() 就可以了
-
@AnthonyGrist:这取决于您处理的事件类型和数量。如果您有 100 个完全不相关的事件,那么直接在元素上处理它们会更有效,而不是让所有事件都通过一个处理程序,该处理程序必须通过所有 100 个选择器来确定哪个事件到达哪个处理程序。
标签: jquery