git.asbjorn.biz
/
jquery.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
04e31ff
)
Added in Ben Alman's proposed event.namespace property (the property holds the namesp...
author
jeresig
<jeresig@gmail.com>
Tue, 2 Mar 2010 22:34:12 +0000
(17:34 -0500)
committer
jeresig
<jeresig@gmail.com>
Tue, 2 Mar 2010 22:34:12 +0000
(17:34 -0500)
src/event.js
patch
|
blob
|
history
test/unit/event.js
patch
|
blob
|
history
diff --git
a/src/event.js
b/src/event.js
index
cec2845
..
b549cd5
100644
(file)
--- a/
src/event.js
+++ b/
src/event.js
@@
-368,7
+368,7
@@
jQuery.event = {
},
handle: function( 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;
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();
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");
}
events = jQuery.data(this, "events");
@@
-393,7
+395,7
@@
jQuery.event = {
var handleObj = handlers[ j ];
// Filter the functions by class
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;
// 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 = [],
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)
events = jQuery.data( this, "events" );
// Make sure we avoid non-left-click bubbling in Firefox (#3861)
@@
-1005,6
+1007,10
@@
function liveHandler( event ) {
return;
}
return;
}
+ if ( event.namespace ) {
+ namespace = new RegExp("(^|\\.)" + event.namespace.split(".").join("\\.(?:.*\\.)?") + "(\\.|$)");
+ }
+
event.liveFired = this;
var live = events.live.slice(0);
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];
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;
elem = close.elem;
related = null;
diff --git
a/test/unit/event.js
b/test/unit/event.js
index
b224070
..
786a46e
100644
(file)
--- a/
test/unit/event.js
+++ b/
test/unit/event.js
@@
-1135,41
+1135,55
@@
test("live with multiple events", function(){
});
test("live with namespaces", function(){
});
test("live with namespaces", function(){
- expect(6);
+ expect(12);
var count1 = 0, count2 = 0;
var count1 = 0, count2 = 0;
- jQuery("#liveSpan1").live("foo.bar", function(){
+ jQuery("#liveSpan1").live("foo.bar", function(e){
count1++;
});
count1++;
});
- jQuery("#liveSpan2").live("foo.zed", function(){
+ jQuery("#liveSpan1").live("foo.zed", function(e){
count2++;
});
jQuery("#liveSpan1").trigger("foo.bar");
equals( count1, 1, "Got live foo.bar" );
count2++;
});
jQuery("#liveSpan1").trigger("foo.bar");
equals( count1, 1, "Got live foo.bar" );
+ equals( count2, 0, "Got live foo.bar" );
+
+ count1 = 0, count2 = 0;
- jQuery("#liveSpan2").trigger("foo.zed");
+ jQuery("#liveSpan1").trigger("foo.zed");
+ equals( count1, 0, "Got live foo.zed" );
equals( count2, 1, "Got live foo.zed" );
//remove one
equals( count2, 1, "Got live foo.zed" );
//remove one
- jQuery("#liveSpan2").die("foo.zed");
+ count1 = 0, count2 = 0;
+
+ jQuery("#liveSpan1").die("foo.zed");
jQuery("#liveSpan1").trigger("foo.bar");
jQuery("#liveSpan1").trigger("foo.bar");
- equals( count1, 2, "Got live foo.bar after dieing foo.zed" );
+ equals( count1, 1, "Got live foo.bar after dieing foo.zed" );
+ equals( count2, 0, "Got live foo.bar after dieing foo.zed" );
- jQuery("#liveSpan2").trigger("foo.zed");
- equals( count2, 1, "Got live foo.zed" );
+ count1 = 0, count2 = 0;
+
+ jQuery("#liveSpan1").trigger("foo.zed");
+ equals( count1, 0, "Got live foo.zed" );
+ equals( count2, 0, "Got live foo.zed" );
//remove the other
jQuery("#liveSpan1").die("foo.bar");
//remove the other
jQuery("#liveSpan1").die("foo.bar");
+ count1 = 0, count2 = 0;
+
jQuery("#liveSpan1").trigger("foo.bar");
jQuery("#liveSpan1").trigger("foo.bar");
- equals( count1, 2, "Did not respond to foo.bar after dieing it" );
+ equals( count1, 0, "Did not respond to foo.bar after dieing it" );
+ equals( count2, 0, "Did not respond to foo.bar after dieing it" );
- jQuery("#liveSpan2").trigger("foo.zed");
- equals( count2, 1, "Did not trigger foo.zed again" );
+ jQuery("#liveSpan1").trigger("foo.zed");
+ equals( count1, 0, "Did not trigger foo.zed again" );
+ equals( count2, 0, "Did not trigger foo.zed again" );
});
test("live with change", function(){
});
test("live with change", function(){