【问题标题】:jQuery Propagation issuejQuery 传播问题
【发布时间】:2011-12-15 22:08:15
【问题描述】:

另一个愚蠢的问题,我无法通过所有其他线程完全弄清楚,所以希望这里有人可以。

一个演示在http://jsfiddle.net/OwenMelbz/PaAt2/

基本上我明白了

when click inside document
spawn div

when click div
do nothing

when doubleclick div
do this

目前,当我双击它时,它会运行代码,但它也会在我单击元素的地方生成另一个 div。

我的代码在上面发布的 jsfiddle 上!

谢谢

【问题讨论】:

  • 我想你也只需要在双击事件上调用 stopPropagation() 方法。
  • 直播事件停止传播问题stackoverflow.com/questions/1122375/…
  • 感谢 bipins,很高兴看到这一点 :) Keith 解决了问题!

标签: jquery click propagation right-click


【解决方案1】:

不知道为什么,但这对我有用。 http://jsfiddle.net/PaAt2/4/。这可能与实时处理事件与绑定的方式有关。

【讨论】:

【解决方案2】:

Keith 是对的,他的解决方案之所以有效,是因为 live() 和 bind() 的工作方式不同。

bind() 将您的事件处理程序附加到调用它的 jQuery 对象中的所有 DOM 元素。 live() 将一个事件处理程序从 jQuery 附加到“事件上下文”(查找 http://api.jquery.com/live 以获取更多信息)。默认情况下,这是 DOM 树的根。这个事件处理程序在那里捕获事件,这些事件在它所绑定的对象内冒泡(或传播)DOM 对象。当它捕获到一个时,它会查看事件的起源,如果它与应用 live() 的 jQuery 对象的选择器匹配,它会运行您提供的函数参数作为事件处理程序。

这意味着如果您有一个容器(在本例中为“#project-wrap”)并绑定到它的点击事件,您通常会获得来自该容器内任何内容的点击,因为它们会冒泡到容器。但是,如果您使用 live() 将事件绑定到容器,您将只会获得源自该容器本身的点击,即来自容器内空白空间的点击,而不是点击其中包含的任何内容。

【讨论】:

  • 啊,第 2 段刚刚通过了解 live 和 bind 的工作原理证实了这一点!非常感谢!
猜你喜欢
  • 2015-02-16
  • 1970-01-01
  • 2011-08-22
  • 1970-01-01
  • 1970-01-01
  • 2014-10-14
  • 2014-08-14
  • 2010-12-25
相关资源
最近更新 更多