Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何检查事件传播是否已停止?_Javascript_Events - Fatal编程技术网

Javascript 如何检查事件传播是否已停止?

Javascript 如何检查事件传播是否已停止?,javascript,events,Javascript,Events,我正在用JavaScript编写一个事件调度器,并决定基于标准js CustomEvent类。我无法找到如何检测侦听器中的事件传播是否已停止(通过e.stopPropagation())。我应该自己编写一个事件对象实现吗?您试过了吗 e.isPropagationStopped() 或 据我所知,除了监视Event.prototype.stopPropagation函数外,没有其他方法。如果属性cancelable设置为true,并且使用了事件的preventDefault()方法,则Cust

我正在用JavaScript编写一个事件调度器,并决定基于标准js CustomEvent类。我无法找到如何检测侦听器中的事件传播是否已停止(通过e.stopPropagation())。我应该自己编写一个事件对象实现吗?

您试过了吗

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,不仅是您,而且很多人都反对它。所有评论都已从版主处删除。我们得问问警察。ХЗ!