@@ -112,12 +112,35 @@ function createInvoker(
112112 } else if ( e . _vts <= invoker . attached ) {
113113 return
114114 }
115- callWithAsyncErrorHandling (
116- patchStopImmediatePropagation ( e , invoker . value ) ,
117- instance ,
118- ErrorCodes . NATIVE_EVENT_HANDLER ,
119- [ e ] ,
120- )
115+ const value = invoker . value
116+ if ( isArray ( value ) ) {
117+ const originalStop = e . stopImmediatePropagation
118+ e . stopImmediatePropagation = ( ) => {
119+ originalStop . call ( e )
120+ ; ( e as any ) . _stopped = true
121+ }
122+ for ( let i = 0 ; i < value . length ; i ++ ) {
123+ if ( ( e as any ) . _stopped ) {
124+ break
125+ }
126+ const handler = value [ i ]
127+ if ( handler ) {
128+ callWithAsyncErrorHandling (
129+ handler ,
130+ instance ,
131+ ErrorCodes . NATIVE_EVENT_HANDLER ,
132+ [ e ] ,
133+ )
134+ }
135+ }
136+ } else {
137+ callWithAsyncErrorHandling (
138+ value ,
139+ instance ,
140+ ErrorCodes . NATIVE_EVENT_HANDLER ,
141+ [ e ] ,
142+ )
143+ }
121144 }
122145 invoker . value = initialValue
123146 invoker . attached = getNow ( )
@@ -134,21 +157,3 @@ function sanitizeEventValue(value: unknown, propName: string): EventValue {
134157 )
135158 return NOOP
136159}
137-
138- function patchStopImmediatePropagation (
139- e : Event ,
140- value : EventValue ,
141- ) : EventValue {
142- if ( isArray ( value ) ) {
143- const originalStop = e . stopImmediatePropagation
144- e . stopImmediatePropagation = ( ) => {
145- originalStop . call ( e )
146- ; ( e as any ) . _stopped = true
147- }
148- return ( value as Function [ ] ) . map (
149- fn => ( e : Event ) => ! ( e as any ) . _stopped && fn && fn ( e ) ,
150- )
151- } else {
152- return value
153- }
154- }
0 commit comments