为什么要“点击”、“委托”?和“现场”使用 jQuery 在事件冒泡方面表现不同?
我编写了一个示例 JavaScript 程序来演示 jQuery 函数 click
、delegate
和 live
令人困惑的不同事件冒泡行为。
这是演示页面。
对于每个函数,都有一个包装器和包装器中的点击链接,这两个函数都注册了点击事件函数。
我注意到
- 在
live
和delegate
中使用stopPropagation
并不能阻止 live
和delegate< 中的 事件冒泡/code>,首先触发包装器中的单击事件,然后触发点击链接。但是,对于
click
函数来说,这个顺序是相反的。
谁能解释一下这两种现象?
该示例使用 jQuery 1.6.4,但您可以调整版本。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
首先,live 已被弃用,取而代之的是 on 和 委托 。我会立即停止使用
live
,而不是稍后。上面链接的文档实际上内容非常丰富,并且很好地解释了这些功能的工作原理。delegate 和 live 都依赖冒泡。这就是它们与点击的不同之处。这件事已经浮出水面。委托优于实时,因为您告诉它监视特定的父级,而实时则一直冒泡到文档级别。非常贵。
jQuery 文档值得在这里引用:
To start, live is deprecated in favor of on and delegate in jQuery 1.7+. I would stop using
live
now rather than later. The docs linked above are actually very informative and do a great job of explaining how these functions work.Delegate and live both rely on bubbling. Which is how they differ from click. The event has bubbled up to them. Delegate is superior to live because you tell it to monitor a specific parent whereas live bubbles all the way up to the document level. Very expensive.
The jQuery documentation is worth quoting here:
如果您了解 live 和 delegate 的实现,那么您就会理解这种差异的原因。 Live 和 delegate 在某种程度上不附加到元素,因为元素在绑定时不存在,它们分别附加到根或特定父级,因此存在差异。他们利用事件冒泡,以便当事件从子级冒泡到根或特定父级时,它会为新添加的元素执行此博客条目以获取有关此内容的详细视图
: alfajango.com/blog/the-difference- Between-jquerys-bind-live-and-delegate/" rel="nofollow">http://www.alfajango.com/blog/the-difference- Between-jquerys-bind-live-and-delegate/
If you understand the implementation of live and delegate then you would understand the reason for this difference. Live and delegate in a way are not attached to the element because the element is not there at the time of binding they are attached to either the root or a specific parent respectively and hence the difference. And they make use of event bubbling so that when event bubbles from child to the root or a specific parent it executes for the newly added element see this blog entry for a detailed view around this:
http://www.alfajango.com/blog/the-difference-between-jquerys-bind-live-and-delegate/