From 39a3e53ba7df00a0479e0748fff874703578c7df Mon Sep 17 00:00:00 2001 From: Vladimir Kharlampidi Date: Thu, 30 May 2024 12:22:49 +0300 Subject: [PATCH] fix(core): check for swiper.el in destroy queue fixes #7530 --- src/core/classes/removeClasses.mjs | 1 + src/core/core.mjs | 12 +++++++++--- src/core/events/index.mjs | 1 + src/modules/a11y/a11y.mjs | 8 +++++--- src/modules/autoplay/autoplay.mjs | 6 ++++-- 5 files changed, 20 insertions(+), 8 deletions(-) diff --git a/src/core/classes/removeClasses.mjs b/src/core/classes/removeClasses.mjs index 8bbfd2104..96e2176ab 100644 --- a/src/core/classes/removeClasses.mjs +++ b/src/core/classes/removeClasses.mjs @@ -1,6 +1,7 @@ export default function removeClasses() { const swiper = this; const { el, classNames } = swiper; + if (!el || typeof el === 'string') return; el.classList.remove(...classNames); swiper.emitContainerClasses(); diff --git a/src/core/core.mjs b/src/core/core.mjs index def0cdc2e..65032a40d 100644 --- a/src/core/core.mjs +++ b/src/core/core.mjs @@ -655,8 +655,12 @@ class Swiper { // Cleanup styles if (cleanStyles) { swiper.removeClasses(); - el.removeAttribute('style'); - wrapperEl.removeAttribute('style'); + if (el && typeof el !== 'string') { + el.removeAttribute('style'); + } + if (wrapperEl) { + wrapperEl.removeAttribute('style'); + } if (slides && slides.length) { slides.forEach((slideEl) => { slideEl.classList.remove( @@ -680,7 +684,9 @@ class Swiper { }); if (deleteInstance !== false) { - swiper.el.swiper = null; + if (swiper.el && typeof swiper.el !== 'string') { + swiper.el.swiper = null; + } deleteProps(swiper); } swiper.destroyed = true; diff --git a/src/core/events/index.mjs b/src/core/events/index.mjs index 4cdda8f46..7a6912332 100644 --- a/src/core/events/index.mjs +++ b/src/core/events/index.mjs @@ -15,6 +15,7 @@ const events = (swiper, method) => { const capture = !!params.nested; const domMethod = method === 'on' ? 'addEventListener' : 'removeEventListener'; const swiperMethod = method; + if (!el || typeof el === 'string') return; // Touch Events document[domMethod]('touchstart', swiper.onDocumentTouchStart, { passive: false, capture }); diff --git a/src/modules/a11y/a11y.mjs b/src/modules/a11y/a11y.mjs index 22474c102..19b9aea0e 100644 --- a/src/modules/a11y/a11y.mjs +++ b/src/modules/a11y/a11y.mjs @@ -364,9 +364,11 @@ export default function A11y({ swiper, extendParams, on }) { const document = getDocument(); document.removeEventListener('visibilitychange', onVisibilityChange); // Tab focus - swiper.el.removeEventListener('focus', handleFocus, true); - swiper.el.removeEventListener('pointerdown', handlePointerDown, true); - swiper.el.removeEventListener('pointerup', handlePointerUp, true); + if (swiper.el && typeof swiper.el !== 'string') { + swiper.el.removeEventListener('focus', handleFocus, true); + swiper.el.removeEventListener('pointerdown', handlePointerDown, true); + swiper.el.removeEventListener('pointerup', handlePointerUp, true); + } } on('beforeInit', () => { diff --git a/src/modules/autoplay/autoplay.mjs b/src/modules/autoplay/autoplay.mjs index 707d59fac..b207e847f 100644 --- a/src/modules/autoplay/autoplay.mjs +++ b/src/modules/autoplay/autoplay.mjs @@ -238,8 +238,10 @@ export default function Autoplay({ swiper, extendParams, on, emit, params }) { }; const detachMouseEvents = () => { - swiper.el.removeEventListener('pointerenter', onPointerEnter); - swiper.el.removeEventListener('pointerleave', onPointerLeave); + if (swiper.el && typeof swiper.el !== 'string') { + swiper.el.removeEventListener('pointerenter', onPointerEnter); + swiper.el.removeEventListener('pointerleave', onPointerLeave); + } }; const attachDocumentEvents = () => {