使用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;
}
}
答案 0 :(得分:26)
根本不记得这个价值。每次e
被触发时,事件onclick
都是新的。问题是你总是取消事件冒泡:
if(foo) {
e.stopPropagation();
} else {
e.cancelBubble = true;
}
e.stopPropagation
是W3C方法
防止事件冒泡。e.cancelBubble
是微软
防止事件冒泡的方法。他们都是一样的。所以你每次都要取消事件的冒泡。更多阅读here。
您需要更改方法,以便只有符合条件才能取消冒泡:
document.getElementById("object").onclick = function(e) {
if(e && e.stopPropagation && someCriteriaToStopBubbling === true)
{
e.stopPropagation();
}
else if (someCriteriaToStopBubbling === true)
{
e = window.event;
e.cancelBubble = true;
}
}
<强>更新强>
请记住,在您当前的代码中,如果浏览器支持if (e && e.stopPropagation)
,stopPropagation
将始终为true。如果它进入cancelBubble
的第二个括号,它将不记得最后一次设置的值。见this fiddle。
基本上,总而言之,在您的代码中,每次点击后您都会取消传播。您必须在函数中添加一些条件,以确定是否取消元素层次结构的传播。