2011-10-26 35 views
1

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

演示是在http://jsfiddle.net/OwenMelbz/PaAt2/

基本上香港专业教育学院得到了这么

when click inside document 
spawn div 

when click div 
do nothing 

when doubleclick div 
do this 

的那一刻,当我双击它,它不运行的代码,但如果我点击它也产生另一个DIV元素上。

我的代码是在jsfiddle,因为我张贴上面!

谢谢

+0

我想你只需要在doubleclick事件中调用stopPropagation()方法。 – arkigos

+0

现场活动停止传播问题http://stackoverflow.com/questions/1122375/jquery-event-stoppropagation-seems-not-to-work – Birey

+0

感谢bipins,很好读:)基思解决了问题! – Owen

回答

2

不知道为什么,但这对我有效。 http://jsfiddle.net/PaAt2/4/。这可能与活动如何处理事件vs绑定有关。

+0

你我的朋友,真是太棒了:)谢谢!它的工作现在 - http://the-dot.co.uk/dev/Project%20v1/project.php?project=15 – Owen

+0

这是一个非常酷的用户互动荣誉!很高兴我能帮上忙。 –

1

Keith是正确的,他的解决方案是因为live()和bind()的工作方式之间的区别。

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

这意味着如果你有一个容器(在这个例子中是'#project-wrap')并绑定到它的click事件,你通常会得到源自该容器内任何东西的点击,因为它们会冒泡集装箱。但是,如果使用live()将事件绑定到容器,则只会获得源自该容器本身的点击,即从容器内的空白处点击,而不是点击其中包含的任何内容。

+0

啊,第二段刚刚通过了解现场和工作的约束而得到证实!非常感谢! – Owen