Skip to content

Commit

Permalink
Make sure multiple bound events have their namespaces and data mainta…
Browse files Browse the repository at this point in the history
…ined. Fixes #3549.
  • Loading branch information
jeresig committed Jan 25, 2010
1 parent e01ff6c commit 0474917
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 3 deletions.
15 changes: 12 additions & 3 deletions src/event.js
Expand Up @@ -71,19 +71,28 @@ jQuery.event = {
// Handle multiple events separated by a space
// jQuery(...).bind("mouseover mouseout", fn);
types = types.split( /\s+/ );
var type, i=0;

var type, i = 0;

while ( (type = types[ i++ ]) ) {
// Namespaced event handlers
var namespaces = type.split(".");
type = namespaces.shift();

if ( i > 1 ) {
handler = jQuery.proxy( handler );

if ( data !== undefined ) {
handler.data = data;
}
}

handler.type = namespaces.slice(0).sort().join(".");

// Get the current list of functions bound to this event
var handlers = events[ type ],
special = this.special[ type ] || {};



// Init the event handler queue
if ( !handlers ) {
handlers = events[ type ] = {};
Expand Down
34 changes: 34 additions & 0 deletions test/unit/event.js
Expand Up @@ -37,6 +37,40 @@ test("bind(), multiple events at once", function() {
equals( mouseoverCounter, 1, "bind() with multiple events at once" );
});

test("bind(), multiple events at once and namespaces", function() {
expect(7);

var cur, obj = {};

var div = jQuery("<div/>").bind("focusin.a", function(e) {
equals( e.type, cur, "Verify right single event was fired." );
});

cur = "focusin";
div.trigger("focusin.a");

div = jQuery("<div/>").bind("click mouseover", obj, function(e) {
equals( e.type, cur, "Verify right multi event was fired." );
equals( e.data, obj, "Make sure the data came in correctly." );
});

cur = "click";
div.trigger("click");

cur = "mouseover";
div.trigger("mouseover");

div = jQuery("<div/>").bind("focusin.a focusout.b", function(e) {
equals( e.type, cur, "Verify right multi event was fired." );
});

cur = "focusin";
div.trigger("focusin.a");

cur = "focusout";
div.trigger("focusout.b");
});

test("bind(), no data", function() {
expect(1);
var handler = function(event) {
Expand Down

0 comments on commit 0474917

Please sign in to comment.