X-Git-Url: http://git.asbjorn.it/?a=blobdiff_plain;f=src%2Fevent.js;h=6475cd925a289aad5ff95d16dac232ddcd7e814b;hb=b26da08821ef07860b489ea2450f672ea155ca88;hp=070ed9eb38a4b326771687bd039c42a6f6f42cbc;hpb=a5f95c88c1c58565f0707e6c21bdf1874938a9d3;p=jquery.git diff --git a/src/event.js b/src/event.js index 070ed9e..6475cd9 100644 --- a/src/event.js +++ b/src/event.js @@ -19,7 +19,7 @@ jQuery.event = { // if data is passed, bind to handler if( data != undefined ) { - // Create temporary function pointer to original handler + // Create temporary function pointer to original handler var fn = handler; // Create unique handler function, wrapped around original handler @@ -253,11 +253,11 @@ jQuery.event = { }; // Fix target property, if necessary - if ( !event.target && event.srcElement ) - event.target = event.srcElement; + if ( !event.target ) + event.target = event.srcElement || document; // Fixes #1925 where srcElement might not be defined either // check if target is a textnode (safari) - if (jQuery.browser.safari && event.target.nodeType == 3) + if ( event.target.nodeType == 3 ) event.target = originalEvent.target.parentNode; // Add relatedTarget, if necessary @@ -348,7 +348,8 @@ jQuery.fn.extend({ while ( parent && parent != this ) try { parent = parent.parentNode; } catch(error) { parent = this; }; // If we actually just moused on to a sub-element, ignore it - if ( parent == this ) return false; + if ( parent == this ) + return true; // Execute the right function return (event.type == "mouseover" ? fnOver : fnOut).apply(this, [event]); @@ -401,7 +402,7 @@ jQuery.extend({ jQuery.readyList = null; } // Remove event listener to avoid memory leak - if ( jQuery.browser.mozilla || jQuery.browser.opera ) + if ( document.removeEventListener ) document.removeEventListener( "DOMContentLoaded", jQuery.ready, false ); } } @@ -424,37 +425,34 @@ function bindReady(){ if ( readyBound ) return; readyBound = true; - // If Mozilla is used - if ( jQuery.browser.mozilla || jQuery.browser.opera ) + // Mozilla, Opera and webkit nightlies currently support this event + if ( document.addEventListener ) // Use the handy event callback document.addEventListener( "DOMContentLoaded", jQuery.ready, false ); // If Safari or IE is used - else { - // Continually check to see if the document is ready - function timer(){ - try { - // If IE is used, use the trick by Diego Perini - // http://javascript.nwbox.com/IEContentLoaded/ - if ( jQuery.browser.msie || document.readyState != "loaded" && document.readyState != "complete" ) - document.documentElement.doScroll("left"); - - // and execute any waiting functions - jQuery.ready(); - } catch( error ) { - setTimeout( timer, 0 ); - } + // Continually check to see if the document is ready + if (jQuery.browser.msie || jQuery.browser.safari ) (function(){ + try { + // If IE is used, use the trick by Diego Perini + // http://javascript.nwbox.com/IEContentLoaded/ + if ( jQuery.browser.msie || document.readyState != "loaded" && document.readyState != "complete" ) + document.documentElement.doScroll("left"); + } catch( error ) { + return setTimeout( arguments.callee, 0 ); } - timer(); - } + // and execute any waiting functions + jQuery.ready(); + })(); // A fallback to window.onload, that will always work jQuery.event.add( window, "load", jQuery.ready ); } // Prevent memory leaks in IE -if ( jQuery.browser.msie ) - jQuery(window).bind("unload", function() { - $("*").add([document, window]).unbind(); - }); +// And prevent errors on refresh with events like mouseover +// Window isn't included so as not to unbind existing unload events +jQuery(window).bind("unload", function() { + jQuery("*").add(document).unbind(); +});