Javascript 如何检查事件传播是否已停止?
我正在用JavaScript编写一个事件调度器,并决定基于标准js CustomEvent类。我无法找到如何检测侦听器中的事件传播是否已停止(通过e.stopPropagation())。我应该自己编写一个事件对象实现吗?您试过了吗Javascript 如何检查事件传播是否已停止?,javascript,events,Javascript,Events,我正在用JavaScript编写一个事件调度器,并决定基于标准js CustomEvent类。我无法找到如何检测侦听器中的事件传播是否已停止(通过e.stopPropagation())。我应该自己编写一个事件对象实现吗?您试过了吗 e.isPropagationStopped() 或 据我所知,除了监视Event.prototype.stopPropagation函数外,没有其他方法。如果属性cancelable设置为true,并且使用了事件的preventDefault()方法,则Cust
e.isPropagationStopped()
或
据我所知,除了监视
Event.prototype.stopPropagation
函数外,没有其他方法。如果属性cancelable
设置为true,并且使用了事件的preventDefault()
方法,则CustomEvent将具有布尔属性
var evt = new CustomEvent("custom", {cancelable : true});
console.log(evt.defaultPrevented);
evt.preventDefault();
console.log(evt.defaultPrevented);
:Chrome 18,IE 9,Edge,Opera 11,Safari 5。您有两种可能的解决方案:
第一个解决方案
属性是的历史别名。但是它与函数Event.stopPropagation()
不同,因为Event.cancelBubble
我们可以阅读如下内容:
var isPropagationStopped = event.cancelBubble; // true if it was stopped, or false if not
var isPropagationStopped = false;
var stopPropagationFuncTemp = Event.prototype.stopPropagation;
Event.prototype.stopPropagation = function()
{
isPropagationStopped = true;
stopPropagationFuncTemp.apply(this, arguments);
};
下一个解决方案
您可以覆盖基本事件对象上的stopPropagation
方法,并在覆盖的方法中设置自己的标志,如下所示:
var isPropagationStopped = event.cancelBubble; // true if it was stopped, or false if not
var isPropagationStopped = false;
var stopPropagationFuncTemp = Event.prototype.stopPropagation;
Event.prototype.stopPropagation = function()
{
isPropagationStopped = true;
stopPropagationFuncTemp.apply(this, arguments);
};
现在如果
isPropagationStopped==true
那么它就停止了。这是jQuery特有的特性吗?我在MDN中找不到任何信息。不,这是一个Javascript事件。请在上查看。这仅适用于自定义事件,而不是常规事件。理论上。它不存在于现代浏览器中。不知道你的意思。如果传播被停止,您的侦听器将永远不会被调用。@Bergi很高兴知道测试。回答正确。停止传播和防止默认值是完全不同的事情。问题是如何检查事件传播是否停止。@Nagy Zoltán:没有必要争论,你是对的。我不太清楚为什么这是我三年前的答案。尽管如此,似乎人们在寻找这个答案的时候还是想到了上面的问题。因此,连同您的免责声明,我将把答案留在这里。我想知道为什么这个答案在下面有Event.cancelBubble时有+500赏金。这正是问题的答案。@waterpreace,不仅是您,而且很多人都反对它。所有评论都已从版主处删除。我们得问问警察。ХЗ!