Просмотр исходного кода

fix(runtime-vapor): skip disabled delegated direct handlers (#14948)

edison 6 дней назад
Родитель
Сommit
0135bdb6ae

+ 18 - 0
packages/runtime-vapor/__tests__/dom/event.spec.ts

@@ -109,6 +109,24 @@ describe('dom event', () => {
     expect(handler).toHaveBeenCalled()
   })
 
+  test('delegate skips disabled direct handlers', () => {
+    const handler = vi.fn()
+
+    const Comp = defineVaporComponent({
+      setup() {
+        const button = template('<button disabled></button>')() as any
+        button.$evtclick = handler
+        return button
+      },
+    })
+
+    const { host } = define(Comp).render()
+    const button = host.querySelector('button')!
+    button.dispatchEvent(new MouseEvent('click', { bubbles: true }))
+
+    expect(handler).not.toHaveBeenCalled()
+  })
+
   test('delegate', () => {
     const handler = vi.fn()
     const el = renderWithElement(el => {

+ 1 - 1
packages/runtime-vapor/src/dom/event.ts

@@ -108,7 +108,7 @@ const delegatedEventHandler = (e: Event) => {
             if (e.cancelBubble) return
           }
         }
-      } else {
+      } else if (!node.disabled) {
         handlers(e)
         if (e.cancelBubble) return
       }