@@ -58,9 +58,10 @@ export class ViewController {
5858 private _listenerMap = new WeakMap <
5959 Element ,
6060 {
61- normal : Map < string , EventListener < unknown > >
62- capture : Map < string , EventListener < unknown > >
63- }
61+ name : string
62+ listener : EventListener < unknown >
63+ isCapture : boolean
64+ } [ ]
6465 > ( )
6566
6667 private _styleSheetIdMapping = Object . create ( null ) as Record < number , number >
@@ -649,21 +650,22 @@ export class ViewController {
649650 ) : void {
650651 const { _glassEasel, _listenerMap } = this
651652 const elemListenerMap = _listenerMap
652- if ( ! elemListenerMap . has ( element ) ) {
653- elemListenerMap . set ( element , {
654- normal : new Map ( ) ,
655- capture : new Map ( ) ,
656- } )
653+ if ( ! elemListenerMap . has ( element ) ) elemListenerMap . set ( element , [ ] )
654+ const listeners = elemListenerMap . get ( element ) !
655+ const oldIndex = listeners . findIndex (
656+ ( { name, isCapture } ) => name === type && isCapture === capture ,
657+ )
658+ if ( oldIndex !== - 1 ) {
659+ const { listener : oldListener , isCapture : oldIsCapture } = listeners [ oldIndex ] !
660+ listeners . splice ( oldIndex , 1 )
661+ element . removeListener ( type , oldListener , { capture : oldIsCapture } )
657662 }
658- const listenerMap = elemListenerMap . get ( element ) !
659- const listeners = capture ? listenerMap . capture : listenerMap . normal
660- if ( listeners . has ( type ) ) element . removeListener ( type , listeners . get ( type ) ! )
661663 element . addListener ( type , listener , {
662664 mutated : mutLevel === _glassEasel . EventMutLevel . Mut ,
663665 final : mutLevel === _glassEasel . EventMutLevel . Final ,
664666 capture,
665667 } )
666- listeners . set ( type , listener )
668+ listeners . push ( { name : type , listener, isCapture : capture } )
667669 }
668670
669671 initValues ( element : Element , values : Record < string , unknown > ) : void {
0 commit comments