aboutsummaryrefslogtreecommitdiff
path: root/js/src
diff options
context:
space:
mode:
authorAlessandro Chitolina <[email protected]>2017-09-19 22:58:06 +0200
committerXhmikosR <[email protected]>2019-02-20 22:05:45 +0200
commit53ca76ebc0fa2737e7344efedabb28b2a0d6be53 (patch)
tree55ce3a5fd4760f8c8d708ebd35c0f2c6ed1932dd /js/src
parent33211eefdfb27eff7ba21886e16f2efdc0efa3e6 (diff)
downloadbootstrap-53ca76ebc0fa2737e7344efedabb28b2a0d6be53.tar.xz
bootstrap-53ca76ebc0fa2737e7344efedabb28b2a0d6be53.zip
Workaround for M$ Edge resetting defaultPrevented flag upon dispatchEvent
Diffstat (limited to 'js/src')
-rw-r--r--js/src/dom/eventHandler.js24
1 files changed, 23 insertions, 1 deletions
diff --git a/js/src/dom/eventHandler.js b/js/src/dom/eventHandler.js
index a69ab6136..b72684f81 100644
--- a/js/src/dom/eventHandler.js
+++ b/js/src/dom/eventHandler.js
@@ -16,6 +16,8 @@ const workingDefaultPrevented = (() => {
return e.defaultPrevented
})()
+let defaultPreventedPreservedOnDispatch = true
+
// CustomEvent polyfill for IE (see: https://mzl.la/2v76Zvn)
if (typeof window.CustomEvent !== 'function') {
window.CustomEvent = (event, params) => {
@@ -46,6 +48,20 @@ if (typeof window.CustomEvent !== 'function') {
}
window.CustomEvent.prototype = window.Event.prototype
+} else {
+ // MSEdge resets defaultPrevented flag upon dispatchEvent call if at least one listener is attached
+ defaultPreventedPreservedOnDispatch = (() => {
+ const e = new CustomEvent('Bootstrap', {
+ cancelable: true
+ })
+
+ const element = document.createElement('div')
+ element.addEventListener('Bootstrap', () => null)
+
+ e.preventDefault()
+ element.dispatchEvent(e)
+ return e.defaultPrevented
+ })()
}
// Event constructor shim
@@ -276,7 +292,7 @@ const EventHandler = {
if (isNative) {
evt = document.createEvent('HTMLEvents')
- evt.initEvent(typeEvent, true, true)
+ evt.initEvent(typeEvent, bubbles, true)
} else {
evt = new CustomEvent(event, {
bubbles,
@@ -291,6 +307,12 @@ const EventHandler = {
if (defaultPrevented) {
evt.preventDefault()
+
+ if (!defaultPreventedPreservedOnDispatch) {
+ Object.defineProperty(evt, 'defaultPrevented', {
+ get: () => true
+ })
+ }
}
if (nativeDispatch) {