mirror of
https://github.com/jlengrand/webcomponentsjs.git
synced 2026-03-10 08:51:22 +00:00
Merge pull request #434 from webcomponents/sd-polyfill-fix-ce-preventdefault-ie
Fix event.defaultPrevented for IE
This commit is contained in:
@@ -113,6 +113,9 @@ if (!window.CustomEvent || isIE && (typeof window.CustomEvent !== 'function')) {
|
||||
// CustomEvents
|
||||
// http://stackoverflow.com/questions/23349191/event-preventdefault-is-not-working-in-ie-11-for-custom-events
|
||||
e.preventDefault = function() {
|
||||
if (!this.cancelable) {
|
||||
return;
|
||||
}
|
||||
Object.defineProperty(this, 'defaultPrevented', {
|
||||
get: function() {
|
||||
return true;
|
||||
|
||||
@@ -36,6 +36,9 @@ if (!window.CustomEvent || isIE && (typeof window.CustomEvent !== 'function')) {
|
||||
// CustomEvents
|
||||
// http://stackoverflow.com/questions/23349191/event-preventdefault-is-not-working-in-ie-11-for-custom-events
|
||||
e.preventDefault = function() {
|
||||
if (!this.cancelable) {
|
||||
return;
|
||||
}
|
||||
Object.defineProperty(this, 'defaultPrevented', {
|
||||
get: function() {
|
||||
return true;
|
||||
|
||||
@@ -520,6 +520,29 @@
|
||||
stopImmediatePropagationTable.set(this, true);
|
||||
}
|
||||
};
|
||||
|
||||
// defaultPrevented is broken in IE.
|
||||
// https://connect.microsoft.com/IE/feedback/details/790389/event-defaultprevented-returns-false-after-preventdefault-was-called
|
||||
var supportsDefaultPrevented = (function() {
|
||||
var e = document.createEvent('Event');
|
||||
e.initEvent('test', true, true);
|
||||
e.preventDefault();
|
||||
return e.defaultPrevented;
|
||||
})();
|
||||
|
||||
if (!supportsDefaultPrevented) {
|
||||
Event.prototype.preventDefault = function() {
|
||||
if (!this.cancelable)
|
||||
return;
|
||||
unsafeUnwrap(this).preventDefault();
|
||||
Object.defineProperty(this, 'defaultPrevented', {
|
||||
get: function() {
|
||||
return true;
|
||||
}
|
||||
});
|
||||
};
|
||||
}
|
||||
|
||||
registerWrapper(OriginalEvent, Event, document.createEvent('Event'));
|
||||
|
||||
function unwrapOptions(options) {
|
||||
|
||||
@@ -333,6 +333,18 @@ suite('Events', function() {
|
||||
assertArrayEqual(log, [a, Event.CAPTURING_PHASE, b, Event.CAPTURING_PHASE]);
|
||||
});
|
||||
|
||||
test('preventDefault sets defaultPrevented', function() {
|
||||
// is not prevented when not cancelable
|
||||
var e = new CustomEvent('foo');
|
||||
e.preventDefault();
|
||||
assert.isFalse(e.defaultPrevented);
|
||||
|
||||
// is prevented when cancelable
|
||||
e = new CustomEvent('foo', {cancelable: true});
|
||||
e.preventDefault();
|
||||
assert.isTrue(e.defaultPrevented);
|
||||
});
|
||||
|
||||
test('click with shadow', function() {
|
||||
function addListener(target, currentTarget, opt_phase) {
|
||||
var phases;
|
||||
@@ -1165,10 +1177,7 @@ test('retarget order (multiple shadow roots)', function() {
|
||||
div.click();
|
||||
assert.equal(calls, 2);
|
||||
|
||||
// defaultPrevented is broken in IE.
|
||||
// https://connect.microsoft.com/IE/feedback/details/790389/event-defaultprevented-returns-false-after-preventdefault-was-called
|
||||
if (!/Trident|Edge/.test(navigator.userAgent))
|
||||
assert.isTrue(event.defaultPrevented);
|
||||
assert.isTrue(event.defaultPrevented);
|
||||
});
|
||||
|
||||
test('event.path (bubbles)', function() {
|
||||
|
||||
Reference in New Issue
Block a user