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.
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 );
}
});
}
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();