event.preventDefault() не работает в IE 11 для пользовательских событий

У меня есть полимерный элемент, который синхронно запускает пользовательское событие, и я хочу знать, было ли событие отменено с помощью event.preventDefault(). Используя event.defaultPrevented, я могу знать предполагаемое действие. Это работает во всех браузерах (Chrome, Canary, Firefox, Opera), но в IE 11 (не беспокоятся о старых браузерах) не работает. Я знаю, что могу установить какое-либо свойство в моем событии и проверить его там, где я запускаю и обработать, но хочу знать, есть ли что-то еще, что я пропустил.

Вы можете попробовать код с http://jsbin.com/husamupi/1/edit

2 ответа

Решение

У меня была такая же проблема, и я мог решить ее следующим взломом:

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

Похоже, IE 11 не устанавливает defaultPrevented для "синтетических" событий, созданных кодом.

Пример JSbin: http://jsbin.com/wohafoyo/1/edit

Независимо от того, что я пытался с точки зрения создания и распределения событий, я не мог сделать синтетическое событие клика preventDefault задавать defaultPrevented к истине.

Возможно, Полимер мог изменить CustomElement.prototype.preventDefault установить defaultPrevented,

Другие вопросы по тегам