diff options
author | Richard Gibson <richard.gibson@gmail.com> | 2017-01-11 15:19:30 -0700 |
---|---|---|
committer | Michał Gołębiowski-Owczarek <m.goleb@gmail.com> | 2019-03-20 16:40:16 +0100 |
commit | 669f720edc4f557dfef986db747c09ebfaa16ef5 (patch) | |
tree | dba33f1b3713faa4d2e6e3cfedbd0795a28261cb | |
parent | a0abd15b9e5aa9c1f36a9599e6095304825a7b9f (diff) | |
download | jquery-669f720edc4f557dfef986db747c09ebfaa16ef5.tar.gz jquery-669f720edc4f557dfef986db747c09ebfaa16ef5.zip |
Event: Leverage native events for focus/blur/click; propagate additional data
Summary of the changes/fixes:
1. Trigger checkbox and radio click events identically (cherry-picked from
b442abacbb8464f0165059e8da734e3143d0721f that was reverted before).
2. Manually trigger a native event before checkbox/radio handlers.
3. Add test coverage for triggering namespaced native-backed events.
4. Propagate extra parameters passed when triggering the click event to
the handlers.
5. Intercept and preserve namespaced native-backed events.
6. Leverage native events for focus and blur.
7. Accept that focusin handlers may fire more than once for now.
Fixes gh-1741
Fixes gh-3423
Fixes gh-3751
Fixes gh-4139
Closes gh-4279
Ref gh-1367
Ref gh-3494
-rw-r--r-- | src/event.js | 177 | ||||
-rw-r--r-- | src/manipulation.js | 6 | ||||
-rw-r--r-- | src/serialize.js | 2 | ||||
-rw-r--r-- | src/var/rcheckableType.js (renamed from src/manipulation/var/rcheckableType.js) | 0 | ||||
-rw-r--r-- | test/unit/event.js | 163 |
5 files changed, 294 insertions, 54 deletions
diff --git a/src/event.js b/src/event.js index 0bf481b16..cb70e8ebe 100644 --- a/src/event.js +++ b/src/event.js @@ -4,6 +4,7 @@ define( [ "./var/documentElement", "./var/isFunction", "./var/rnothtmlwhite", + "./var/rcheckableType", "./var/slice", "./data/var/dataPriv", "./core/nodeName", @@ -11,7 +12,7 @@ define( [ "./core/init", "./selector" ], function( jQuery, document, documentElement, isFunction, rnothtmlwhite, - slice, dataPriv, nodeName ) { + rcheckableType, slice, dataPriv, nodeName ) { "use strict"; @@ -329,9 +330,10 @@ jQuery.event = { while ( ( handleObj = matched.handlers[ j++ ] ) && !event.isImmediatePropagationStopped() ) { - // Triggered event must either 1) have no namespace, or 2) have namespace(s) - // a subset or equal to those in the bound event (both can have no namespace). - if ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) { + // If the event is namespaced, then each handler is only invoked if it is + // specially universal or its namespaces are a superset of the event's. + if ( !event.rnamespace || handleObj.namespace === false || + event.rnamespace.test( handleObj.namespace ) ) { event.handleObj = handleObj; event.data = handleObj.data; @@ -457,37 +459,101 @@ jQuery.event = { }, focus: { - // Fire native event if possible so blur/focus sequence is correct + // Utilize native event if possibl |