Pārlūkot izejas kodu

x-mask: Cleanup of event listeners (#3908)

Alexander Shabunevich 1 gadu atpakaļ
vecāks
revīzija
0115f8b73f
1 mainītis faili ar 9 papildinājumiem un 3 dzēšanām
  1. 9 3
      packages/mask/src/index.js

+ 9 - 3
packages/mask/src/index.js

@@ -1,6 +1,6 @@
 
 
 export default function (Alpine) {
 export default function (Alpine) {
-    Alpine.directive('mask', (el, { value, expression }, { effect, evaluateLater }) => {
+    Alpine.directive('mask', (el, { value, expression }, { effect, evaluateLater, cleanup }) => {
         let templateFn = () => expression
         let templateFn = () => expression
         let lastInputValue = ''
         let lastInputValue = ''
 
 
@@ -43,10 +43,16 @@ export default function (Alpine) {
             if (el._x_model) el._x_model.set(el.value)
             if (el._x_model) el._x_model.set(el.value)
         })
         })
 
 
-        el.addEventListener('input', () => processInputValue(el))
+        const controller = new AbortController()
+
+        cleanup(() => {
+            controller.abort()
+        })
+
+        el.addEventListener('input', () => processInputValue(el), { signal: controller.signal })
         // Don't "restoreCursorPosition" on "blur", because Safari
         // Don't "restoreCursorPosition" on "blur", because Safari
         // will re-focus the input and cause a focus trap.
         // will re-focus the input and cause a focus trap.
-        el.addEventListener('blur', () => processInputValue(el, false))
+        el.addEventListener('blur', () => processInputValue(el, false), { signal: controller.signal })
 
 
         function processInputValue (el, shouldRestoreCursor = true) {
         function processInputValue (el, shouldRestoreCursor = true) {
             let input = el.value
             let input = el.value