X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=src%2Fevent.js;h=b549cd544e3521fa798ef5d7cf6423893c014f0a;hb=9584e908a2daa2a72bd738302dba7cfd0656dbdf;hp=cec2845a17cedfb3b6aa8bbb3ade1d76988b960e;hpb=04e31ff058548fbdbdf77c61d4edc3a974b080f4;p=jquery.git diff --git a/src/event.js b/src/event.js index cec2845..b549cd5 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;