Safari 2 was having problems with the syntax used for the ready handling.
[jquery.git] / src / event.js
index daa3d2e..4775866 100644 (file)
@@ -266,8 +266,8 @@ jQuery.event = {
                // Calculate pageX/Y if missing and clientX/Y available
                if ( event.pageX == null && event.clientX != null ) {
                        var e = document.documentElement, b = document.body;
-                       event.pageX = event.clientX + (e && e.scrollLeft || b.scrollLeft || 0);
-                       event.pageY = event.clientY + (e && e.scrollTop || b.scrollTop || 0);
+                       event.pageX = event.clientX + (e && e.scrollLeft || b && b.scrollLeft || 0);
+                       event.pageY = event.clientY + (e && e.scrollTop || b && b.scrollTop || 0);
                }
                        
                // Add which for key events
@@ -429,21 +429,24 @@ function bindReady(){
                document.addEventListener( "DOMContentLoaded", jQuery.ready, false );
        
        // If Safari or IE is used
-       else
+       else {
                // Continually check to see if the document is ready
-               (function timer() {
+               function timer(){
                        try {
-                               // If IE is used, use the excellent hack by Hedger Wang and Andrea Giammarchi
-                               // http://www.3site.eu/jstests/onContent/DOMReadyAnddoScroll.php
+                               // 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.firstChild.doScroll("left");
+                                       document.documentElement.doScroll("left");
        
                                // and execute any waiting functions
                                jQuery.ready();
                        } catch( error ) {
                                setTimeout( timer, 0 );
                        }
-               })();
+               }
+
+               timer();
+       }
 
        // A fallback to window.onload, that will always work
        jQuery.event.add( window, "load", jQuery.ready );