3

我有一个同步触发自定义事件的聚合物元素,我想知道是否使用 event.preventDefault() 取消了该事件。使用 event.defaultPrevented 我可以知道预期的操作。这适用于所有浏览器(Chrome、Canary、Firefox、Opera),但在 IE 11(不担心旧浏览器)上不起作用。我知道我可以在我的事件上设置一些属性并检查我正在触发和处理的位置,但想知道是否还有其他我错过的东西。

您可以从http://jsbin.com/husamupi/1/edit试用代码

4

2 回答 2

5

我遇到了同样的问题,可以通过以下 hack 解决:

var event = document.createEvent('CustomEvent');
event.initCustomEvent('custom', true, true, {});
event.preventDefault = function () {
    Object.defineProperty(this, "defaultPrevented", {get: function () {return true;}});
};
event.preventDefault();
event.defaultPrevented; // true
于 2014-12-28T09:22:56.377 回答
3

看起来 IE 11 没有defaultPrevented为代码创建的“合成”事件设置。

示例 JSbin:http: //jsbin.com/wohafoyo/1/edit

无论我在事件创建和调度方面做了什么尝试,我都无法将合成点击事件preventDefault设置defaultPrevented为 true。

也许 Polymer 可以修改CustomElement.prototype.preventDefault为 set defaultPrevented

于 2014-04-28T19:36:46.210 回答