diff --git a/packages/core/onClickOutside/index.ts b/packages/core/onClickOutside/index.ts index c2d49d18526..7da5e51f683 100644 --- a/packages/core/onClickOutside/index.ts +++ b/packages/core/onClickOutside/index.ts @@ -49,27 +49,25 @@ export function onClickOutside( window.clearTimeout(fallback) const el = unrefElement(target) - const composedPath = event.composedPath() - if (!el || el === event.target || composedPath.includes(el) || !shouldListen.value) + if (!el || el === event.target || event.composedPath().includes(el) || !shouldListen.value) return - if (ignore && ignore.length > 0) { - if (ignore.some((target) => { - const el = unrefElement(target) - return el && (event.target === el || composedPath.includes(el)) - })) - return - } - handler(event) } + const shouldIgnore = (event: PointerEvent) => { + return ignore && ignore.some((target) => { + const el = unrefElement(target) + return el && (event.target === el || event.composedPath().includes(el)) + }) + } + const cleanup = [ useEventListener(window, 'click', listener, { passive: true, capture }), useEventListener(window, 'pointerdown', (e) => { const el = unrefElement(target) - shouldListen.value = !!el && !e.composedPath().includes(el) + shouldListen.value = !!el && !e.composedPath().includes(el) && !shouldIgnore(e) }, { passive: true }), useEventListener(window, 'pointerup', (e) => { if (e.button === 0) {