X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=src%2Fevent.js;h=ebf1231cba0b43f95d04a7beb4f6bf947a6ea774;hb=8f042d8be34fe2d197e45d6fa398456759a4c007;hp=4f63bae19f8e3e742ca66a734c5354f53acafa62;hpb=a4b8fed8ad7542309e5f4573468261c9a98af97f;p=jquery.git diff --git a/src/event.js b/src/event.js index 4f63bae..ebf1231 100644 --- a/src/event.js +++ b/src/event.js @@ -160,7 +160,7 @@ jQuery.event = { break; } if ( !ret ) { - if ( !this.special[ type ] || this.special[ type ].teardown.call( elem, namespaces ) === false ) { + if ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) { if ( elem.removeEventListener ) { elem.removeEventListener( type, jQuery.data( elem, "handle" ), false ); } else if ( elem.detachEvent ) { @@ -214,11 +214,11 @@ jQuery.event = { event.stopPropagation(); // Only trigger if we've ever bound an event for it if ( this.global[ type ] ) { - for ( var cached in jQuery.cache ) { - if ( cached.events && cached.events[ type ] ) { - this.trigger( event, data, cached.handle.elem ); + jQuery.each( jQuery.cache, function() { + if ( this.events && this.events[type] ) { + jQuery.event.trigger( event, data, this.handle.elem ); } - } + }); } } @@ -351,8 +351,8 @@ jQuery.event = { // Calculate pageX/Y if missing and clientX/Y available if ( event.pageX == null && event.clientX != null ) { var doc = document.documentElement, body = document.body; - event.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc.clientLeft || 0); - event.pageY = event.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc.clientTop || 0); + event.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0); + event.pageY = event.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc && doc.clientTop || body && body.clientTop || 0); } // Add which for key events @@ -388,14 +388,14 @@ jQuery.event = { setup: bindReady, teardown: function() {} }, - + live: { add: function( proxy, data, namespaces ) { jQuery.extend( proxy, data || {} ); proxy.guid += data.selector + data.live; jQuery.event.add( this, data.live, liveHandler ); }, - + teardown: function( namespaces ) { jQuery.event.remove( this, namespaces[0], liveHandler ); } @@ -479,8 +479,11 @@ var withinElement = function( event ) { var parent = event.relatedTarget; // Traverse up the tree while ( parent && parent != this ) { + // Firefox sometimes assigns relatedTarget a XUL element + // which we cannot access the parentNode property of try { parent = parent.parentNode; } - catch(e) { parent = this; } + // assuming we've left the element since we most likely mousedover a xul element + catch(e) { break; } } if ( parent != this ) { @@ -566,7 +569,7 @@ jQuery.fn.extend({ }, hover: function( fnOver, fnOut ) { - return this.mouseenter( fnOver ).mouseleave( fnOut ); + return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); }, ready: function( fn ) {