This repository was archived by the owner on Apr 12, 2024. It is now read-only.
File tree 2 files changed +24
-2
lines changed
2 files changed +24
-2
lines changed Original file line number Diff line number Diff line change @@ -948,7 +948,9 @@ forEach({
948
948
clone : jqLiteClone ,
949
949
950
950
triggerHandler : function ( element , eventName , eventData ) {
951
- var eventFns = ( jqLiteExpandoStore ( element , 'events' ) || { } ) [ eventName ] ;
951
+ // Copy event handlers in case event handlers array is modified during execution.
952
+ var eventFns = ( jqLiteExpandoStore ( element , 'events' ) || { } ) [ eventName ] ,
953
+ eventFnsCopy = shallowCopy ( eventFns || [ ] ) ;
952
954
953
955
eventData = eventData || [ ] ;
954
956
@@ -962,7 +964,7 @@ forEach({
962
964
stopPropagation : noop
963
965
} ] ;
964
966
965
- forEach ( eventFns , function ( fn ) {
967
+ forEach ( eventFnsCopy , function ( fn ) {
966
968
fn . apply ( element , event . concat ( eventData ) ) ;
967
969
} ) ;
968
970
}
Original file line number Diff line number Diff line change @@ -1743,6 +1743,26 @@ describe('jqLite', function() {
1743
1743
event . preventDefault ( ) ;
1744
1744
expect ( event . isDefaultPrevented ( ) ) . toBe ( true ) ;
1745
1745
} ) ;
1746
+
1747
+
1748
+ it ( 'should support handlers that deregister themselves' , function ( ) {
1749
+ var element = jqLite ( '<a>poke</a>' ) ,
1750
+ clickSpy = jasmine . createSpy ( 'click' ) ,
1751
+ clickOnceSpy = jasmine . createSpy ( 'clickOnce' ) . andCallFake ( function ( ) {
1752
+ element . off ( 'click' , clickOnceSpy ) ;
1753
+ } ) ;
1754
+
1755
+ element . on ( 'click' , clickOnceSpy ) ;
1756
+ element . on ( 'click' , clickSpy ) ;
1757
+
1758
+ element . triggerHandler ( 'click' ) ;
1759
+ expect ( clickOnceSpy ) . toHaveBeenCalledOnce ( ) ;
1760
+ expect ( clickSpy ) . toHaveBeenCalledOnce ( ) ;
1761
+
1762
+ element . triggerHandler ( 'click' ) ;
1763
+ expect ( clickOnceSpy ) . toHaveBeenCalledOnce ( ) ;
1764
+ expect ( clickSpy . callCount ) . toBe ( 2 ) ;
1765
+ } ) ;
1746
1766
} ) ;
1747
1767
1748
1768
You can’t perform that action at this time.
0 commit comments