diff options
author | jeresig <jeresig@gmail.com> | 2010-03-02 17:34:12 -0500 |
---|---|---|
committer | jeresig <jeresig@gmail.com> | 2010-03-02 17:34:12 -0500 |
commit | 9584e908a2daa2a72bd738302dba7cfd0656dbdf (patch) | |
tree | 325eba6f75c8651842e56ade094fbc2a2741e07d /src | |
parent | 04e31ff058548fbdbdf77c61d4edc3a974b080f4 (diff) | |
download | jquery-9584e908a2daa2a72bd738302dba7cfd0656dbdf.tar.gz jquery-9584e908a2daa2a72bd738302dba7cfd0656dbdf.zip |
Added in Ben Alman's proposed event.namespace property (the property holds the namespaces specified in a call to trigger). Additionally fixes namespaces with .live(). Fixes #6208 and #6209.
Diffstat (limited to 'src')
-rw-r--r-- | src/event.js | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/src/event.js b/src/event.js index cec2845a1..b549cd544 100644 --- a/src/event.js +++ b/src/event.js @@ -368,7 +368,7 @@ jQuery.event = { }, handle: function( event ) { - var all, handlers, namespaces, namespace, events, args = jQuery.makeArray( arguments ); + var all, handlers, namespaces, namespace_sort = [], namespace_re, events, args = jQuery.makeArray( arguments ); event = args[0] = jQuery.event.fix( event || window.event ); event.currentTarget = this; @@ -379,7 +379,9 @@ jQuery.event = { if ( !all ) { namespaces = event.type.split("."); event.type = namespaces.shift(); - namespace = new RegExp("(^|\\.)" + namespaces.slice(0).sort().join("\\.(?:.*\\.)?") + "(\\.|$)"); + namespace_sort = namespaces.slice(0).sort(); + namespace_re = new RegExp("(^|\\.)" + namespace_sort.join("\\.(?:.*\\.)?") + "(\\.|$)"); + event.namespace = namespace_sort.join("."); } events = jQuery.data(this, "events"); @@ -393,7 +395,7 @@ jQuery.event = { var handleObj = handlers[ j ]; // Filter the functions by class - if ( all || namespace.test( handleObj.namespace ) ) { + if ( all || namespace_re.test( handleObj.namespace ) ) { // Pass in a reference to the handler function itself // So that we can later remove it event.handler = handleObj.handler; @@ -997,7 +999,7 @@ jQuery.each(["live", "die"], function( i, name ) { function liveHandler( event ) { var stop, maxLevel, elems = [], selectors = [], - related, match, handleObj, elem, j, i, l, data, close, + related, match, handleObj, elem, j, i, l, data, close, namespace, events = jQuery.data( this, "events" ); // Make sure we avoid non-left-click bubbling in Firefox (#3861) @@ -1005,6 +1007,10 @@ function liveHandler( event ) { return; } + if ( event.namespace ) { + namespace = new RegExp("(^|\\.)" + event.namespace.split(".").join("\\.(?:.*\\.)?") + "(\\.|$)"); + } + event.liveFired = this; var live = events.live.slice(0); @@ -1028,7 +1034,7 @@ function liveHandler( event ) { for ( j = 0; j < live.length; j++ ) { handleObj = live[j]; - if ( close.selector === handleObj.selector ) { + if ( close.selector === handleObj.selector && (!namespace || namespace.test( handleObj.namespace )) ) { elem = close.elem; related = null; |