views:

7007

answers:

8

Update: This bug has been confirmed by at least two others. Even if you dont read my full post - if you're reading this and using JQuery 1.3.1 then stop using it if you're relying on any handlers that you want to execute when the DOM is complete but before the page's images have loaded.

Update2: Thanks to Tom (user id 20!) for posting the link to the ticket on the jQuery bug tracker.

Update3 - 2009/01/28: The issue has been properly resolved (for those for whom reverting to 1.2.6 is not an option). For anyone currently using 1.3.1 and needing an immediate fix you can read the accepted answer below for direction. Thanks John.


I just upgraded to JQuery 1.3.1, and it took me several hours to realize that my beloved

$(function( ) {  ... }

syntax was now waiting for the entire page to load (including images) before executing the function body. I was seeing strange behavior when trying to integrate Yahoo's menus. (Fortunately I had some slow loading images on my page which made me aware of the problem)!

I made a test file becasue I figured something more complex was going on, but I still had the same symptoms even with this simple file.

<head>
   <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.1/jquery.min.js"&gt;&lt;/script&gt;   
   <script>
    $(function() {    
      alert("Ready"); 
    });
  </script>
</head>

<body>      
  <img src="<PATH_TO_DYNAMIC_IMAGE>_1.jpg" />
  <img src="<PATH_TO_DYNAMIC_IMAGE>_2.jpg" />
  <img src="<PATH_TO_DYNAMIC_IMAGE>_3.jpg" />
  <img src="<PATH_TO_DYNAMIC_IMAGE>_4.jpg" />       
</body>

Different versions of JQuery had different results:

  • What happens in version 1.2.6 is that alert box is shown instantly and then I see the images loading behind it (expected and documented behavior).
  • What happens in version 1.3.1 is that the images all load and only then will the alert box be shown.

Whats going on! Is this a new feature (I cant imagine why) or a bug?

Important: This only seems to be an issue in IE and not firefox

Sorry I dont have a dynamic image file that is publically accessible to make it easier for others to see this. If you want to test it out I suggest using a large image file picked randomly from google images and clear your cache.

+2  A: 

You should file this as a bug on the jQuery site, they are still bug-testing 1.3

Pim Jager
it just seems something so fundamental that i thought it must have been caught or some special reason. but like i said i cant imagine why that would be! but i also cant imagine i'm the first to find it!
Simon_Weaver
but 1.3.1 is the current released version! oops
Simon_Weaver
+4  A: 

There are some things that just can't be unit tested. Just confirmed in IE6+7 and 1.3.1. Holy hell, what a huge regression.

So, do you have time to report this? Just checked and it's not a known bug for 1.3.1.

Crescent Fresh
if you already know where to check and you could report it that would be great. its 4:50am for me and im about to go to bed! the funny thing is i'm coding a brand new site and the ONLY thing I was using JQuery for so far was this fundamental task!
Simon_Weaver
oh and thanks for humoring me and believing the unbelievable :)
Simon_Weaver
A: 

You're right - same problem here in ie6 & IE7 Firefox & Opera seems to be ok!

this seems like a showstopper bug to me - but they still have 1.3.1 as the current release
Simon_Weaver
+4  A: 

Here's an update of the ticket I submitted. It seems as if @Webdawson has attached a sample page to the ticket.

Tom
@tom - great! thats my bug! i love the gigantic 3MB image they used! awesome. thanks for letting me outsource my bug reporting through you. my days of doing that are over - once you start you cant stop. i got dissilusioned when MS always closed my bugs or said wont fix (except for SQL server bugs!)
Simon_Weaver
+3  A: 

hi tom, yes i've added an example, its clearly a bug in IE6 & 7 (i havn't tested it in other IE versions). It seems as if the 1.3.1 Version has a lot of bugs. :(

Here is the example link: http://www.kollermedia.at/jquery_bug.html

i'd have thought this was the kind of showstopper that meant they'd take down 1.3.1 from their site (at least as being the current release). going to hang a lot of sites for people or make them very unresponsive. oh well.
Simon_Weaver
A: 

Chrome is alright.

Donny V.
+42  A: 

This was due to jQuery bugs #2614 and #3880 - there were definite problems with the ready code in IE in 1.2.6 and in 1.3 - and now a different set of problems in 1.3.1.

A larger discussion can be found here:
http://groups.google.com/group/jquery-dev/browse_thread/thread/3abf45d3fd4d50fc

And the ticket related to the issue can be found here (if you find additional issues with the fix, please re-open the ticket and post to the above jquery-dev thread):
http://dev.jquery.com/ticket/3988

I just landed a fix for this in SVN rev 6170.

I just pushed up a new nightly that you can use until 1.3.2 final comes out:
http://code.jquery.com/nightlies/jquery-2009-01-28.js

Sorry in the delay for getting a fix out - was traveling this week.

John Resig
awesome -- Resig to the rescue :)
Jeff Atwood
Radical! You rock John!
Geoff Dalgas
Thanks a lot, John. This is awesome.
Tom
Now that's service.
jonhobbs
@jresig - any reason why 1.3.1 is still the 'current release' on jQuery.com? i'd hate to see too many people downloading it without knowing about this bug. hopefully anyone using jquery is hungry enough for the newest version that they are upgrading regularly
Simon_Weaver
@Simon: We can't just push out releases whenever we feel like it - we have to coordinate with a number of people. We're working on getting something out, quite soon, but it might be a little bit.
John Resig
A: 

I am using 1.3.1 and I have totally a different result. It DOES NOT wait until the images are loaded. I am using load() ank calling aspx pages that have images to be loaded. It seemd ready() fires before the images loaded so the cycle plugin I call inside it is too early. any suggestions why it happens?

I would submit a new question
John Sheehan
remember it is browser dependent. maybe you are using one of the browsers that has the correct behavior. please check my other question 'http://stackoverflow.com/questions/544993' which i think is what you want
Simon_Weaver