diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/event.js | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/src/event.js b/src/event.js index 95221f475..c9a397c90 100644 --- a/src/event.js +++ b/src/event.js @@ -545,8 +545,8 @@ function leverageNative( el, type, isSetup ) { } // If this is an inner synthetic event for an event with a bubbling surrogate - // (focus or blur), assume that the surrogate already propagated from triggering the - // native event and prevent that from happening again here. + // (focus or blur), assume that the surrogate already propagated from triggering + // the native event and prevent that from happening again here. // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the // bubbling surrogate propagates *after* the non-bubbling base), but that seems // less bad than duplication. @@ -565,8 +565,16 @@ function leverageNative( el, type, isSetup ) { this ) ); - // Abort handling of the native event - event.stopImmediatePropagation(); + // Abort handling of the native event by all jQuery handlers while allowing + // native handlers on the same element to run. On target, this is achieved + // by stopping immediate propagation just on the jQuery event. However, + // the native event is re-wrapped by a jQuery one on each level of the + // propagation so the only way to stop it for jQuery is to stop it for + // everyone via native `stopPropagation()`. This is not a problem for + // focus/blur which don't bubble, but it does also stop click on checkboxes + // and radios. We accept this limitation. + event.stopPropagation(); + event.isImmediatePropagationStopped = returnTrue; } } } ); |