我正在用JavaScript编写一个事件调度程序,我决定基于标准的js CustomEvent类。如果事件传播在侦听器中停止(通过e.stopPropagation()),我无法找到如何检测。我应该自己编写一个Event对象实现吗?
答案 0 :(得分:8)
据我所知,除了窥探Event.prototype.stopPropagation
功能外,别无他法。
答案 1 :(得分:3)
如果属性cancelable
设置为true并且使用了事件的preventDefault()
方法,则CustomEvent将具有布尔属性defaultPrevented
。
var evt = new CustomEvent("custom", {cancelable : true});
console.log(evt.defaultPrevented);
evt.preventDefault();
console.log(evt.defaultPrevented);
Browser Support:Chrome 18,IE 9,Edge,Opera 11,Safari 5.
答案 2 :(得分:1)
第一个解决方案
Event.cancelBubble
属性是 Event.stopPropagation()
的历史别名。但这与功能Event.stopPropagation()
有所不同,因为Event.cancelBubble
我们可以这样读:
var isPropagationStopped = event.cancelBubble; // true if it was stopped, or false if not
下一个解决方案
您可以在基本Event对象上覆盖stopPropagation
方法,并在覆盖的方法中设置自己的标志,如下所示:
var isPropagationStopped = false;
var stopPropagationFuncTemp = Event.prototype.stopPropagation;
Event.prototype.stopPropagation = function()
{
isPropagationStopped = true;
stopPropagationFuncTemp.apply(this, arguments);
};
现在,如果isPropagationStopped == true
则停止。
答案 3 :(得分:-4)
你试过吗?
e.isPropagationStopped()
或者
event.isPropagationStopped()