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 @@ -953,7 +953,9 @@ forEach({
953
953
clone : jqLiteClone ,
954
954
955
955
triggerHandler : function ( element , eventName , eventData ) {
956
- var eventFns = ( jqLiteExpandoStore ( element , 'events' ) || { } ) [ eventName ] ;
956
+ // Copy event handlers in case event handlers array is modified during execution.
957
+ var eventFns = ( jqLiteExpandoStore ( element , 'events' ) || { } ) [ eventName ] ,
958
+ eventFnsCopy = shallowCopy ( eventFns || [ ] ) ;
957
959
958
960
eventData = eventData || [ ] ;
959
961
@@ -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 @@ -1660,6 +1660,26 @@ describe('jqLite', function() {
1660
1660
data = pokeSpy . mostRecentCall . args [ 1 ] ;
1661
1661
expect ( data . hello ) . toBe ( "world" ) ;
1662
1662
} ) ;
1663
+
1664
+
1665
+ it ( 'should support handlers that deregister themselves' , function ( ) {
1666
+ var element = jqLite ( '<a>poke</a>' ) ,
1667
+ clickSpy = jasmine . createSpy ( 'click' ) ,
1668
+ clickOnceSpy = jasmine . createSpy ( 'clickOnce' ) . andCallFake ( function ( ) {
1669
+ element . off ( 'click' , clickOnceSpy ) ;
1670
+ } ) ;
1671
+
1672
+ element . on ( 'click' , clickOnceSpy ) ;
1673
+ element . on ( 'click' , clickSpy ) ;
1674
+
1675
+ element . triggerHandler ( 'click' ) ;
1676
+ expect ( clickOnceSpy ) . toHaveBeenCalledOnce ( ) ;
1677
+ expect ( clickSpy ) . toHaveBeenCalledOnce ( ) ;
1678
+
1679
+ element . triggerHandler ( 'click' ) ;
1680
+ expect ( clickOnceSpy ) . toHaveBeenCalledOnce ( ) ;
1681
+ expect ( clickSpy . callCount ) . toBe ( 2 ) ;
1682
+ } ) ;
1663
1683
} ) ;
1664
1684
1665
1685
You can’t perform that action at this time.
0 commit comments