DRY the hover pseudo-event, get the type right, allow override.

Now with working unit test for extra correctness! If external code defines a special.hover event, we won't string-hack "hover" into "mouseenter mouseleave".
This commit is contained in:
Dave Methvin
2011-10-27 17:11:40 -04:00
parent df4a160be7
commit 5c0c86378a
2 changed files with 26 additions and 3 deletions

View File

@@ -26,6 +26,9 @@ var rnamespaces = /\.(.*)$/,
(!m[2] || elem.id === m[2]) &&
(!m[3] || m[3].test( elem.className ))
);
},
hoverHack = function( events ) {
return jQuery.event.special.hover ? events : events.replace( rhoverHack, "mouseenter$1 mouseleave$1" );
};
/*
@@ -76,7 +79,7 @@ jQuery.event = {
// Handle multiple events separated by a space
// jQuery(...).bind("mouseover mouseout", fn);
types = types.replace( rhoverHack, "mouseover$1 mouseout$1" ).split( " " );
types = hoverHack(types).split( " " );
for ( t = 0; t < types.length; t++ ) {
tns = rtypenamespace.exec( types[t] ) || [];
@@ -166,7 +169,7 @@ jQuery.event = {
}
// Once for each type.namespace in types; type may be omitted
types = ( types || "" ).replace( rhoverHack, "mouseover$1 mouseout$1" ).split(" ");
types = hoverHack( types || "" ).split(" ");
for ( t = 0; t < types.length; t++ ) {
tns = rtypenamespace.exec( types[t] ) || [];
type = tns[1];