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
,