2009-01-25 4 views
46

Mise à jour: Ce bug a été confirmé par au moins deux autres personnes. Même si vous ne lisez pas mon article complet - si vous lisez ceci et utilisez JQuery 1.3.1, alors arrêtez de l'utiliser si vous comptez sur les gestionnaires que vous voulez exécuter lorsque le DOM est terminé mais avant les images de la page avoir chargé.JQuery attend le chargement des images avant l'exécution de document.ready

Update2: Merci à Tom (id utilisateur 20!) Pour l'affichage du link to the ticket sur le bug tracker jQuery.

Update3 - 2009/01/28: Le problème a été résolu correctement (pour ceux pour qui revenir à 1.2.6 n'est pas une option). Pour toute personne utilisant actuellement 1.3.1 et ayant besoin d'une correction immédiate, vous pouvez lire la réponse acceptée ci-dessous pour la direction. Merci John.


Je viens de mettre à JQuery 1.3.1, et il m'a fallu plusieurs heures pour se rendre compte que mon bien-aimé

$(function() { ... } 
syntaxe

attendait maintenant la page entière charge (y compris les images) avant d'exécuter le corps de la fonction. Je voyais strange behavior en essayant d'intégrer les menus de Yahoo. (Heureusement j'ai eu quelques images de chargement lent sur ma page qui m'a fait prendre conscience du problème)!

J'ai fait un fichier de test parce que je pensais que quelque chose de plus complexe se passait, mais j'avais toujours les mêmes symptômes même avec ce simple fichier.

<head> 
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.1/jquery.min.js"></script> 
    <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> 

Différentes versions de JQuery ont des résultats différents:

  • Qu'est-ce qui se passe dans la version 1.2.6 de cette boîte d'alerte est affichée instantanément, puis je vois les images de chargement derrière (prévu et comportement documenté) .
  • Ce qui se passe dans la version 1.3.1 est que les images se chargent toutes et seulement alors la boîte d'alerte sera affichée.

Que se passe-t-il! Est-ce une nouvelle fonctionnalité (je ne peux pas imaginer pourquoi) ou un bug?

Important: Cela ne semble être un problème dans IE et non firefox

Désolé, je n'avez pas un fichier d'image dynamique qui est accessible au public pour le rendre plus facile pour les autres de voir. Si vous voulez le tester, je suggère d'utiliser un grand fichier d'image pris au hasard à partir de google images et vider votre cache.

+0

Je rencontre le même problème avec la version la plus récente de jQuery. Veuillez garder cette question à jour en fonction des commentaires que vous recevez. – Tom

+0

@tom certainement. J'ai envoyé un courriel et twitté John Resig qui a initialement écrit JQuery. Personnellement, je ne suis pas pressé pour un bug (je suis de retour à 1.2.6), mais ils ont vraiment besoin de prendre cette version comme la version publiée sur jquery.com! –

+0

@Simon - J'ai soumis un ticket cet après-midi à propos de ce problème. Ah, les joies du logiciel libre;) Ils vont le faire réparer assez tôt, j'en suis sûr - de bons développeurs dans l'équipe - mais ça craint pour moi parce que je ne peux pas revenir à 1.2.6 = T – Tom

Répondre

57

Cela est dû à des bogues jQuery # 2614 et # 3880 - il y avait des problèmes précis avec le code prêt dans IE en 1.2.6 et 1.3 - et maintenant . différent ensemble de problèmes 1.3.1

Une discussion plus large se trouve ici:
http://groups.google.com/group/jquery-dev/browse_thread/thread/3abf45d3fd4d50fc

Et le billet lié à la question se trouve ici (si vous trouvez d'autres problèmes avec le correctif, PL facilité rouvrez le ticket et poster au fil jquery-dev ci-dessus):
http://dev.jquery.com/ticket/3988

Je viens de décrocher un correctif pour ce SVN rev 6170.

Je viens poussais une nouvelle nuit que vous pouvez utiliser jusqu'à ce que 1.3.2 vient finale sur:
http://code.jquery.com/nightlies/jquery-2009-01-28.js

Désolé dans le délai pour obtenir une solution sur - voyageait cette semaine.

+15

génial - Resig à la rescousse :) –

+1

Radical! Vous rock John! –

+0

Merci beaucoup, John. C'est génial. – Tom

4

Il y a certaines choses qui ne peuvent tout simplement pas être testées à l'unité. Juste confirmé dans IE6 + 7 et 1.3.1. Saint-Hell, quelle régression énorme.

Alors, avez-vous le temps de le signaler? Juste vérifié et ce n'est pas un bug connu pour 1.3.1.

+0

si vous savez déjà où vérifier et vous pourriez le signaler ce serait génial. Il est 4h50 pour moi et je suis sur le point d'aller me coucher! La chose amusante est que je suis en train de coder un tout nouveau site et la seule chose que j'utilisais JQuery à ce jour était cette tâche fondamentale! –

+0

oh et merci de m'avoir humouré et de croire l'incroyable :) –

4

Here's an update of the ticket I submitted. Il semble que @Webdawson a joint une page d'exemple au ticket.

+0

@tom - super! C'est mon bug! J'adore l'image gigantesque de 3 Mo qu'ils ont utilisée! impressionnant. Merci de me laisser externaliser mon signalement de bugs à travers vous. mes jours de faire cela sont terminés - une fois que vous commencez, vous ne pouvez pas arrêter. J'ai été dissiluqué quand MS a toujours fermé mes bogues ou a dit ne pas réparer (sauf pour les bogues de serveur SQL!) –

3

oui j'ai ajouté un exemple, c'est clairement un bogue dans IE6 & 7 (je ne l'ai pas testé dans d'autres versions d'IE). Il semble que la version 1.3.1 ait beaucoup de bugs. :(

Voici le lien exemple: http://www.kollermedia.at/jquery_bug.html

+0

Je pensais que c'était le genre de showstopper qui signifiait qu'ils retireraient 1.3.1 de leur site (au moins étant la version actuelle). va accrocher beaucoup de sites pour les gens ou les rendre très peu réactifs. tant pis. –

Questions connexes