Skip to content

Commit

Permalink
Make sure that focusin/focusout bubbles in non-IE browsers.
Browse files Browse the repository at this point in the history
  • Loading branch information
justinbmeyer authored and jeresig committed Oct 13, 2010
1 parent 39addc8 commit 88068f8
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 5 deletions.
13 changes: 9 additions & 4 deletions src/event.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,8 @@ var rnamespaces = /\.(.*)$/,
rescape = /[^\w\s.|`]/g,
fcleanup = function( nm ) {
return nm.replace(rescape, "\\$&");
};
},
focusCounts = { focusin: 0, focusout: 0 };

/*
* A number of helper functions used for managing events.
Expand Down Expand Up @@ -855,17 +856,21 @@ if ( document.addEventListener ) {
jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {
jQuery.event.special[ fix ] = {
setup: function() {
this.addEventListener( orig, handler, true );
if ( focusCounts[fix]++ === 0 ) {
document.addEventListener( orig, handler, true );
}
},
teardown: function() {
this.removeEventListener( orig, handler, true );
if ( --focusCounts[fix] === 0 ) {
document.removeEventListener( orig, handler, true );
}
}
};

function handler( e ) {
e = jQuery.event.fix( e );
e.type = fix;
return jQuery.event.handle.call( this, e );
return jQuery.event.trigger( e, null, e.target );
}
});
}
Expand Down
16 changes: 15 additions & 1 deletion test/unit/event.js
Original file line number Diff line number Diff line change
Expand Up @@ -1843,7 +1843,21 @@ test("window resize", function() {

ok( !jQuery(window).data("__events__"), "Make sure all the events are gone." );
});

test("focusin bubbles", function(){
//create an input and focusin on it
var input = jQuery("<input/>"),
order = 0;
input.appendTo(document.body);
jQuery(document.body).bind("focusin.focusinBubblesTest",function(){
equals(1,order++,"focusin on the body second")
})
input.bind("focusin.focusinBubblesTest",function(){
equals(0,order++,"focusin on the element first")
})
input[0].focus();
input.remove();
jQuery(document.body).unbind("focusin.focusinBubblesTest");
})
/*
test("jQuery(function($) {})", function() {
stop();
Expand Down

0 comments on commit 88068f8

Please sign in to comment.