diff options
Diffstat (limited to 'alpinejs/packages/alpinejs/src/utils/on.js')
-rw-r--r-- | alpinejs/packages/alpinejs/src/utils/on.js | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/alpinejs/packages/alpinejs/src/utils/on.js b/alpinejs/packages/alpinejs/src/utils/on.js index b000cfd..1727d37 100644 --- a/alpinejs/packages/alpinejs/src/utils/on.js +++ b/alpinejs/packages/alpinejs/src/utils/on.js @@ -28,6 +28,8 @@ export default function on (el, event, modifiers, callback) { handler = wrapHandler(handler, (next, e) => { if (el.contains(e.target)) return + if (e.target.isConnected === false) return + if (el.offsetWidth < 1 && el.offsetHeight < 1) return // Additional check for special implementations like x-collapse @@ -38,6 +40,14 @@ export default function on (el, event, modifiers, callback) { }) } + if (modifiers.includes('once')) { + handler = wrapHandler(handler, (next, e) => { + next(e) + + listenerTarget.removeEventListener(event, handler, options) + }) + } + // Handle :keydown and :keyup listeners. handler = wrapHandler(handler, (next, e) => { if (isKeyEvent(event)) { @@ -63,14 +73,6 @@ export default function on (el, event, modifiers, callback) { handler = throttle(handler, wait) } - if (modifiers.includes('once')) { - handler = wrapHandler(handler, (next, e) => { - next(e) - - listenerTarget.removeEventListener(event, handler, options) - }) - } - listenerTarget.addEventListener(event, handler, options) return () => { |