jquery event: fixes #4989. blur and focus events now bubble and can be handled using live().
This commit is contained in:
parent
f3474c00cd
commit
bca8225413
2 changed files with 63 additions and 2 deletions
35
src/event.js
35
src/event.js
|
@ -518,9 +518,10 @@ var withinElement = function( event ) {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Create mouseenter and mouseleave events
|
||||||
jQuery.each({
|
jQuery.each({
|
||||||
mouseover: 'mouseenter',
|
mouseover: "mouseenter",
|
||||||
mouseout: 'mouseleave'
|
mouseout: "mouseleave"
|
||||||
}, function( orig, fix ) {
|
}, function( orig, fix ) {
|
||||||
jQuery.event.special[ fix ] = {
|
jQuery.event.special[ fix ] = {
|
||||||
setup: function(){
|
setup: function(){
|
||||||
|
@ -532,6 +533,36 @@ jQuery.each({
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Create "bubbling" focus and blur events
|
||||||
|
jQuery.each({
|
||||||
|
focus: "focusin",
|
||||||
|
blur: "focusout"
|
||||||
|
}, function( orig, fix ){
|
||||||
|
var event = jQuery.event,
|
||||||
|
special = event.special,
|
||||||
|
handle = event.handle;
|
||||||
|
|
||||||
|
function ieHandler() {
|
||||||
|
arguments[0].type = orig;
|
||||||
|
return handle.apply(this, arguments);
|
||||||
|
}
|
||||||
|
|
||||||
|
special[orig] = {
|
||||||
|
setup:function() {
|
||||||
|
if ( this.addEventListener )
|
||||||
|
this.addEventListener( orig, handle, true );
|
||||||
|
else
|
||||||
|
jQuery.event.add( this, fix, ieHandler );
|
||||||
|
},
|
||||||
|
teardown:function() {
|
||||||
|
if ( this.removeEventListener )
|
||||||
|
this.removeEventListener( orig, handle, true );
|
||||||
|
else
|
||||||
|
jQuery.event.remove( this, fix, ieHandler );
|
||||||
|
}
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
jQuery.fn.extend({
|
jQuery.fn.extend({
|
||||||
bind: function( type, data, fn, thisObject ) {
|
bind: function( type, data, fn, thisObject ) {
|
||||||
if ( jQuery.isFunction( data ) ) {
|
if ( jQuery.isFunction( data ) ) {
|
||||||
|
|
|
@ -745,6 +745,36 @@ test(".live()/.die()", function() {
|
||||||
jQuery('span#liveSpan1').die('click');
|
jQuery('span#liveSpan1').die('click');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test("live with focus/blur", function(){
|
||||||
|
expect(2);
|
||||||
|
|
||||||
|
// Setup
|
||||||
|
jQuery("<input type='text' id='livefb' />").appendTo("body");
|
||||||
|
|
||||||
|
var $child = jQuery("#livefb"),
|
||||||
|
child = $child[0],
|
||||||
|
counter = 0;
|
||||||
|
|
||||||
|
function count(){
|
||||||
|
counter++;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Test
|
||||||
|
$child.live("focus", count);
|
||||||
|
$child.live("blur", count);
|
||||||
|
|
||||||
|
child.focus();
|
||||||
|
equals(counter, 1, "Test live() with focus event");
|
||||||
|
|
||||||
|
child.blur();
|
||||||
|
equals(counter, 2, "Test live() with blur event");
|
||||||
|
|
||||||
|
// Teardown
|
||||||
|
$child.die("focus", count);
|
||||||
|
$child.die("blur", count);
|
||||||
|
$child.remove();
|
||||||
|
});
|
||||||
|
|
||||||
test("Non DOM element events", function() {
|
test("Non DOM element events", function() {
|
||||||
expect(3);
|
expect(3);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue