event.preventDefault()在IE 11中无法用于自定义事件

时间:2014-04-28 19:02:32

标签: internet-explorer polymer custom-event

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

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

2 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:2)

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

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

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

也许Polymer可以修改CustomElement.prototype.preventDefault来设置defaultPrevented