X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=src%2Fevent.js;h=014fb7362e111ea6bef95b5ed5364b9ecdd19b55;hb=3a23a5c17dd0522da06db8f36890f134f9004de6;hp=a1d5ed04584de55713d7aecda23d0bb583c92531;hpb=d251809912c06478fd0c7711736ef6ea3572723e;p=jquery.git diff --git a/src/event.js b/src/event.js index a1d5ed0..014fb73 100644 --- a/src/event.js +++ b/src/event.js @@ -583,7 +583,6 @@ jQuery.each({ blur: "focusout" }, function( orig, fix ){ var event = jQuery.event, - special = event.special, handle = event.handle; function ieHandler() { @@ -591,18 +590,18 @@ jQuery.each({ return handle.apply(this, arguments); } - special[orig] = { + event.special[orig] = { setup:function() { if ( this.addEventListener ) this.addEventListener( orig, handle, true ); else - jQuery.event.add( this, fix, ieHandler ); + event.add( this, fix, ieHandler ); }, teardown:function() { if ( this.removeEventListener ) this.removeEventListener( orig, handle, true ); else - jQuery.event.remove( this, fix, ieHandler ); + event.remove( this, fix, ieHandler ); } }; }); @@ -694,13 +693,14 @@ jQuery.fn.extend({ return this.click( jQuery.event.proxy( fn, function( event ) { // Figure out which function to execute - this.lastToggle = ( this.lastToggle || 0 ) % i; + var lastToggle = ( jQuery.data( this, 'lastToggle' + fn.guid ) || 0 ) % i; + jQuery.data( this, 'lastToggle' + fn.guid, lastToggle + 1 ); // Make sure that clicks stop event.preventDefault(); // and execute the function - return args[ this.lastToggle++ ].apply( this, arguments ) || false; + return args[ lastToggle ].apply( this, arguments ) || false; })); }, @@ -792,6 +792,10 @@ jQuery.extend({ ready: function() { // Make sure that the DOM is not already loaded if ( !jQuery.isReady ) { + if ( !document.body ) { + return setTimeout( jQuery.ready, 13 ); + } + // Remember that the DOM is ready jQuery.isReady = true; @@ -839,16 +843,21 @@ function bindReady() { // maybe late but safe also for iframes document.attachEvent("onreadystatechange", function() { // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). - if ( document.readyState === "complete" && document.body ) { + if ( document.readyState === "complete" ) { document.detachEvent( "onreadystatechange", arguments.callee ); jQuery.ready(); } }); - // If IE and not an iframe + // If IE and not a frame // continually check to see if the document is ready - // NOTE: DO NOT CHANGE TO ===, FAILS IN IE. - if ( document.documentElement.doScroll && window == window.top ) (function() { + var toplevel = false; + + try { + toplevel = window.frameElement == null; + } catch(e){} + + if ( document.documentElement.doScroll && toplevel ) (function() { if ( jQuery.isReady ) { return; }