2011-09-01 7 views
0

Cela me semble un problème très simple, mais en dépit de googler toutes les chaînes de recherche possibles, je ne trouve pas de réponse. J'utilise jquery 1.5.1 et j'essaie d'utiliser la fonction $ (document) .ready() pour lier plusieurs événements de clic lors du chargement de la page. Finalement, je PRECISEE le problème à ce petit:jquery (document) .ready() ne fonctionne pas dans IE 7+

$(document).ready(function(){ 
    alert('hello world'); 
}); 

Dans IE 6,7 et 8 je ne vois jamais l'alerte Bonjour tout le monde quand je charge la page. IE 9 fonctionne bien, de même que FF, Chrome, Safari, etc.

Une solution qui a fonctionné était d'entourer l'alerte dans un délai JS de 500 ms. Cela semble seulement fonctionner parfois mais certainement pas assez régulièrement. La seule possibilité que je peux penser est que parce que ce script se trouve bien chargé dans la balise body de la page HTML, cela peut être en train de chambouler la fonction ready(). Si c'est le cas, je ne sais pas quelle serait la solution.

MISE À JOUR

OK, après avoir testé une page plus petite, je peux obtenir le document, prêt à travailler dans IE (aucune alerte si, je suppose que c'est un problème complètement différent).

Y a-t-il des bizarreries concernant IE en termes d'où vous pouvez charger les fichiers javascript dans la page?

+1

Montrez-nous en plus de la page – n8wrl

+0

est-ce définitivement jQuery 1.5.1 que vous utilisez? Il y a un problème avec jQuery 1.5 avec IE <8 que je peux entrer dans plus de détails sur si c'est bien 1.5 que vous utilisez –

+0

Certainement 100% 1.5.1 – scott

Répondre

0

Donc, après avoir déconné avec cela, je suis arrivé à la conclusion que les navigateurs IE que j'utilise dans une machine virtuelle sont en faute. L'échec des boutons et des appels ajax à fonctionner correctement semble être aléatoire et intermittent indépendamment des changements que je fais au javascript. Je pense que le document prêt avait fonctionné tout le long et les navigateurs échouaient de différentes manières. Cela semble fonctionner maintenant.

0

Avez-vous d'autres fichiers javascript qui pourraient entrer en conflit avec jQuery $?

Effectuer un test lorsque la page se charge,

if (typeof jQuery == 'undefined') { 
     var script = document.createElement('script'); 
     script.type = 'text/javascript'; 
     script.src = 'js/jquery/1.4.4/jquery.min.js'; 
     document.getElementsByTagName('head')[0].appendChild(script); 
     setTimeout(checkjQuery, 0); 
    } 
    function checkjQuery() { 
     if (typeof jQuery == 'undefined') { 
      setTimeout(checkjQuery, 0); 
     } else { 
      jQuery.noConflict(); 
     } 
    }; 
+0

J'utilise le prototype côte à côte, mais j'ai 'var jq = jQuery.noConflict() 'fonctionne. Et n'ai eu aucun problème avec ça. – scott

+1

@scott: Autre que votre script régulièrement ne fonctionne pas, vous voulez dire? –

0

Il n'y a aucune raison d'utiliser $(document).ready à l'intérieur du corps de la page. Utilisez-le lorsque votre tag SCRIPT est dans le HEAD de la page, ou bien supprimez-le et n'ajoutez votre tag SCRIPT qu'après que tous les éléments de corps nécessaires ont été fermés.

+0

Même si je le déplace en dehors de l'étiquette du corps, cela ne fonctionne toujours pas. Cela fait partie d'une application MVC, nous avons donc des fichiers d'en-tête de site et des fichiers de pied de page partagés partout. Cela n'a pas de sens de charger ce script partout. – scott

1

Qu'avez-vous dans l'attribut type=""? IE est très strict quand il s'agit de cet attribut. Si vous spécifiez cet attribut, il doit contenir "text/javascript", sinon IE l'ignorera.

0

J'ai eu ce problème avec IE7, il semble que j'utilisais

<script type='application/javascript' language='javascript'> 
$(document).ready(function() { ... }) 
</script> 

Changer la première balise de script à

<script type='text/javascript' language='javascript'> 

Semble pour le faire fonctionner. J'espère que cela t'aides.

Questions connexes