X-Git-Url: http://git.asbjorn.it/?a=blobdiff_plain;f=src%2Fevent.js;h=d5be7c5a921712caab3882a1d8e5fc13ea144ddb;hb=fde3d616ac3d8efe822c6dbf23d7659b00fc54b1;hp=fa8be8d2f576de60d9f35ac049c5a550e0fcc69c;hpb=a7dfbb55d9e4be6bbf096abb0e06e32086476a96;p=jquery.git diff --git a/src/event.js b/src/event.js index fa8be8d..d5be7c5 100644 --- a/src/event.js +++ b/src/event.js @@ -263,18 +263,11 @@ jQuery.event = { }, fix: function(event) { - // Short-circuit if the event has already been fixed by jQuery.event.fix - if ( event[ expando ] ) - return event; - // store a copy of the original event object // and clone to set read-only properties var originalEvent = event; event = jQuery.extend({}, originalEvent); - // Mark the event as fixed by jQuery.event.fix - event[ expando ] = true; - // add preventDefault and stopPropagation since // they will not work on the clone event.preventDefault = function() { @@ -478,7 +471,7 @@ jQuery.extend({ } // Trigger any bound ready events - $(document).triggerHandler("ready"); + jQuery(document).triggerHandler("ready"); } } }); @@ -489,27 +482,58 @@ function bindReady(){ if ( readyBound ) return; readyBound = true; - // Mozilla, Opera and webkit nightlies currently support this event - if ( document.addEventListener ) + // Mozilla, Opera (see further below for it) and webkit nightlies currently support this event + if ( document.addEventListener && !jQuery.browser.opera) // Use the handy event callback document.addEventListener( "DOMContentLoaded", jQuery.ready, false ); - // If Safari or IE is used + // If IE is used and is not in a frame // Continually check to see if the document is ready - if (jQuery.browser.msie || jQuery.browser.safari ) (function(){ + if ( jQuery.browser.msie && window == top ) (function(){ + if (jQuery.isReady) return; 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"); + document.documentElement.doScroll("left"); } catch( error ) { - return setTimeout( arguments.callee, 0 ); + setTimeout( arguments.callee, 0 ); + return; } - // and execute any waiting functions jQuery.ready(); })(); + if ( jQuery.browser.opera ) + document.addEventListener( "DOMContentLoaded", function () { + if (jQuery.isReady) return; + for (var i = 0; i < document.styleSheets.length; i++) + if (document.styleSheets[i].disabled) { + setTimeout( arguments.callee, 0 ); + return; + } + // and execute any waiting functions + jQuery.ready(); + }, false); + + if ( jQuery.browser.safari ) { + var numStyles; + (function(){ + if (jQuery.isReady) return; + if ( document.readyState != "loaded" && document.readyState != "complete" ) { + setTimeout( arguments.callee, 0 ); + return; + } + if ( numStyles === undefined ) + numStyles = jQuery("style, link[rel=stylesheet]").length; + if ( document.styleSheets.length != numStyles ) { + setTimeout( arguments.callee, 0 ); + return; + } + // and execute any waiting functions + jQuery.ready(); + })(); + } + // A fallback to window.onload, that will always work jQuery.event.add( window, "load", jQuery.ready ); }