Ada*_*dam 14 javascript events event-bubbling event-propagation
随着object.stopPropagation()
我能阻止事件冒泡,但我怎样才能重新启用它?
在js中有预先定义的函数object.startPropagation
吗?
编辑:
问题是JS记得你是否点击"对象"而不是停止事件冒泡,即使我不想要它,所以我想阻止它:
document.getElementById("object").onclick = function(e){
if(e && e.stopPropagation) {
e.stopPropagation();
} else {
e = window.event;
e.cancelBubble = true;
}
}
Run Code Online (Sandbox Code Playgroud)
djd*_*d87 26
它根本不记得价值.e
每次onclick
触发事件都是新事件.问题是你总是取消事件冒泡:
if(foo) {
e.stopPropagation();
} else {
e.cancelBubble = true;
}
Run Code Online (Sandbox Code Playgroud)
e.stopPropagation
是阻止事件冒泡的W3C方法.e.cancelBubble
是防止事件冒泡的Microsoft方法.他们都是一样的.所以你每次都要取消事件的冒泡.更多阅读在这里.
您需要更改方法,以便只有在符合条件时才取消冒泡:
document.getElementById("object").onclick = function(e) {
if(e && e.stopPropagation && someCriteriaToStopBubbling === true)
{
e.stopPropagation();
}
else if (someCriteriaToStopBubbling === true)
{
e = window.event;
e.cancelBubble = true;
}
}
Run Code Online (Sandbox Code Playgroud)
更新:
请记住,在您当前的代码中,if (e && e.stopPropagation)
如果浏览器支持,将始终为true stopPropagation
.如果它进入第二个括号cancelBubble
,它将不记得最后一次设置的值.看到这个小提琴.
基本上,总而言之,在您的代码中,每次点击后您都会取消传播.您必须在函数中添加一些条件,以确定是否取消元素层次结构中的传播.
归档时间: |
|
查看次数: |
47758 次 |
最近记录: |