Landing pull request 397. withinElement rewrite in event. Fixes #6234, #9357, #9447.

More Details:
 - https://github.com/jquery/jquery/pull/397
 - http://bugs.jquery.com/ticket/6234
 - http://bugs.jquery.com/ticket/9357
 - http://bugs.jquery.com/ticket/9447
This commit is contained in:
rwldrn 2011-06-14 15:38:46 -04:00 committed by timmywil
parent 641ad80211
commit 6926247bf4
2 changed files with 49 additions and 19 deletions

View file

@ -650,34 +650,27 @@ jQuery.Event.prototype = {
// Checks if an event happened on an element within another element
// Used in jQuery.event.special.mouseenter and mouseleave handlers
var withinElement = function( event ) {
// Check if mouse(over|out) are still within the same parent element
var parent = event.relatedTarget;
// set the correct event type
// Check if mouse(over|out) are still within the same parent element
var related = event.relatedTarget,
inside = false,
eventType = event.type;
event.type = event.data;
// Firefox sometimes assigns relatedTarget a XUL element
// which we cannot access the parentNode property of
try {
if ( related !== this ) {
// Chrome does something similar, the parentNode property
// can be accessed but is null.
if ( parent && parent !== document && !parent.parentNode ) {
return;
if ( related ) {
inside = jQuery.contains( this, related );
}
// Traverse up the tree
while ( parent && parent !== this ) {
parent = parent.parentNode;
}
if ( !inside ) {
if ( parent !== this ) {
// handle event if we actually just moused on to a non sub-element
jQuery.event.handle.apply( this, arguments );
}
// assuming we've left the element since we most likely mousedover a xul element
} catch(e) { }
event.type = eventType;
}
}
},
// In case of event delegation, we only need to rename the event.type,