@@ -10,18 +10,21 @@ define( [
1010
1111"use strict" ;
1212
13- var rfocusMorph = / ^ (?: f o c u s i n f o c u s | f o c u s o u t b l u r ) $ / ;
13+ var rfocusMorph = / ^ (?: f o c u s i n f o c u s | f o c u s o u t b l u r ) $ / ,
14+ stopPropagationCallback = function ( e ) {
15+ e . stopPropagation ( ) ;
16+ } ;
1417
1518jQuery . extend ( jQuery . event , {
1619
1720 trigger : function ( event , data , elem , onlyHandlers ) {
1821
19- var i , cur , tmp , bubbleType , ontype , handle , special ,
22+ var i , cur , tmp , bubbleType , ontype , handle , special , lastElement ,
2023 eventPath = [ elem || document ] ,
2124 type = hasOwn . call ( event , "type" ) ? event . type : event ,
2225 namespaces = hasOwn . call ( event , "namespace" ) ? event . namespace . split ( "." ) : [ ] ;
2326
24- cur = tmp = elem = elem || document ;
27+ cur = lastElement = tmp = elem = elem || document ;
2528
2629 // Don't do events on text and comment nodes
2730 if ( elem . nodeType === 3 || elem . nodeType === 8 ) {
@@ -93,7 +96,7 @@ jQuery.extend( jQuery.event, {
9396 // Fire handlers on the event path
9497 i = 0 ;
9598 while ( ( cur = eventPath [ i ++ ] ) && ! event . isPropagationStopped ( ) ) {
96-
99+ lastElement = cur ;
97100 event . type = i > 1 ?
98101 bubbleType :
99102 special . bindType || type ;
@@ -136,7 +139,17 @@ jQuery.extend( jQuery.event, {
136139
137140 // Prevent re-triggering of the same event, since we already bubbled it above
138141 jQuery . event . triggered = type ;
142+
143+ if ( event . isPropagationStopped ( ) ) {
144+ lastElement . addEventListener ( type , stopPropagationCallback ) ;
145+ }
146+
139147 elem [ type ] ( ) ;
148+
149+ if ( event . isPropagationStopped ( ) ) {
150+ lastElement . removeEventListener ( type , stopPropagationCallback ) ;
151+ }
152+
140153 jQuery . event . triggered = undefined ;
141154
142155 if ( tmp ) {
0 commit comments