我会在这里有情侣情景.请帮我
以下是基本案例:http://jsfiddle.net/2zsLy/9/
当我点击时Click Me,两个警报框Another Paragraph都出来了.这是预期的,因为click事件会冒泡到父容器,即body.现在开始我的问题
1)http://jsfiddle.net/2zsLy/10/
如何添加return false到我live.click不会阻止点击事件冒泡.从示例中,live.click冒泡并触发警报框.我认为文档说返回false会阻止实时事件冒泡.
2)http://jsfiddle.net/2zsLy/11/
现在,我将click事件更改为bodyto live.click并修复了问题 - > click事件没有冒泡(因此没有显示警告框).为什么live.click工作而click不是.
3)http://jsfiddle.net/2zsLy/13/
我认为文件清楚地说,呼唤event.stopPropagation()不会阻止冒泡的发生,我刚刚做了.我用event.stopPropagation()它期望它仍会触发我的警报框,但事实并非如此.为什么?
注意:对于前两个问题的justkt答案,请参阅答案.关于最后一个问题的答案,请参阅Squeegy答案及其答复.
jus*_*tkt 11
您可以在event.stopPropagation()文档中找到您的问题的答案.
关于直播('点击')与'点击'和冒泡:
由于.live()方法在事件传播到文档顶部后处理事件,因此无法停止实时事件的传播.同样,.delegate()处理的事件将始终传播到它们被委派给的元素; 在调用委托事件处理程序时,已经在其下面的任何元素上执行事件处理程序.
所以你所看到的是预期的行为.live('click')不会停止冒泡.现在首选的.delegate()也是如此.
这个答案广泛地描述了使用.live时停止刺激的问题.另请参见.live()文档:
事件会一直冒泡,直到它到达树的根,这是默认情况下.live()绑定其特殊处理程序的地方.
- 从jQuery 1.4开始,事件冒泡可以选择在DOM元素"context"处停止.
关于stopPropagation本身:
杀死点击事件上的冒泡.
所以stopPropagation()应该在任何返回false的地方防止冒泡; 会,虽然不会在哪里.这是preventDefault()方法不会阻止起泡. return false;实际上是stopPropagation()和preventDefault().
回应每个jsfiddle的例子.
return false;不会阻止使用live或delegate冒泡的事件.文档明确地说明了所有冒泡,无论是用return false;还是用stopPropagation().那么会发生什么
<p><body>,body.click()触发的位置$(event.target).closest('p');,因此live('click')被调用在这种情况下,事件到达相同的位置(文档根),并且返回false将传播停止到live身体上的另一个通过绑定的事件.
<p><body>,但由于body的处理程序是通过live连接的,因此尚未调用$(event.target).closest('p');,因此live('click')被调用live('click') 由于返回false发生,因此未在身体上调用.stopPropagation()显式用于防止冒泡,虽然它有相同的限制return false;- 因此live('click')如果有绑定的点击处理程序,它不会阻止它在事件的情况下bind.
| 归档时间: |
|
| 查看次数: |
9702 次 |
| 最近记录: |