IE's preventDefault is only right during event dispatch

Regression fix from #444
This commit is contained in:
Daniel Freedman
2015-11-16 14:57:33 -08:00
parent b743f4e3b8
commit bba5fb870f
3 changed files with 38 additions and 17 deletions

View File

@@ -537,14 +537,12 @@
unsafeUnwrap(this).preventDefault();
if (!this.defaultPrevented) {
Object.defineProperty(this, 'defaultPrevented', {
get: function() {
return true;
},
configurable: true
});
}
Object.defineProperty(this, 'defaultPrevented', {
get: function() {
return true;
},
configurable: true
});
};
}

View File

@@ -67,14 +67,12 @@
origPreventDefault.call(this);
if (!this.defaultPrevented) {
Object.defineProperty(this, 'defaultPrevented', {
get: function() {
return true;
},
configurable: true
});
}
Object.defineProperty(this, 'defaultPrevented', {
get: function() {
return true;
},
configurable: true
});
};
}

View File

@@ -88,7 +88,32 @@
e.preventDefault();
assert.isTrue(e.defaultPrevented);
// call again, just in case
assert.doesNotThrow(e.preventDefault);
assert.doesNotThrow(function() {e.preventDefault(); });
});
test('CustomEvent defaultPrevented', function() {
var e = new CustomEvent('foo', {cancelable: true});
e.preventDefault();
assert.isTrue(e.defaultPrevented);
// call again, just in case
assert.doesNotThrow(function() {e.preventDefault(); });
});
test('dispatch and prevent', function() {
var el = document.createElement('div');
document.body.appendChild(el);
var e = new CustomEvent('foo', {cancelable: true, bubbles: true});
var fn = function(e) {
e.preventDefault();
};
var check = function check(e) {
assert.isTrue(e.defaultPrevented);
document.body.removeEventListener('foo', check);
document.body.removeChild(el);
};
el.addEventListener('foo', fn);
document.body.addEventListener('foo', check);
assert.isTrue(e.defaultPrevented);
});
});
</script>