web-dev-qa-db-fra.com

Pourquoi $ (document) .ready ne tire-t-il pas pour moi?

Dans un fichier php, j’ai utilisé include pour inclure le fichier js.php suivant .__ et avant cela j’avais inclus le fichier jquery.

<script type="text/javascript">

$(document).ready(function(){
     alert("hello");
});
</script>

Mais ça ne marche pas. Pourquoi? quand je saute la fonction $ (document) .ready cela fonctionne.

Mais j'ai besoin de code jQuery à l'intérieur. Qu'est-ce qui ne va pas?

28
never_had_a_name

La réponse la plus probable, basée sur ce que vous avez dit, est que le fichier jQuery principal n’est pas réellement inclus correctement dans la page ..__

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>

Les chances sont, cela est manquant ou mal tapé.

30
David

Une autre cause qui échouera silencieusement et tous les rappels restants n’auront jamais été appelés:

$(document).ready(null);

Vérifiez donc si vous avez des variables ou des erreurs de syntaxe qui renvoient null. Comme celui-ci:

$(document).ready(function($){}(jQuery));

Notez que la fonction ci-dessus est appelée instantanément et qu'un indéfini est renvoyé.

24
gregers
  1. Vérifiez si jQuery est chargé correctement.
  2. Regardez la barre de progression du navigateur: il se peut que certains compteurs soient chargés et que le document ne soit pas prêt tant qu'ils ne sont pas chargés: cela arrive souvent lorsque les ressources externes sont lentes.
  3. Essayez $(function(){ alert(...); }); juste au cas où ...
  4. Vérifiez si vous avez des erreurs JS avant cette liaison onload. Utilisez le plugin FireBug de Firefox pour le vérifier.
4
kolypto

Regardez également comment vous définissez la balise include jquery. Il semble que pour une raison quelconque, vous devez ouvrir et fermer la balise avec deux balises distinctes. L'utilisation d'une balise avec fermeture semble ne pas fonctionner:

Travaux: 

<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.js"></script>

Ne fonctionne pas:

<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.js"/>
3
raoulsson

J'ai fait face à un problème similaire aussi et c'est ce que j'ai fait.

Assurez-vous que document.ready est placé après la fonction de rappel est définie dans votre fichier javascript.

Ici, init n'est pas encore défini lorsque document.ready est en cours d'analyse.

//won't work
$(document).ready(init);
var init = function() {
   console.log('init not called');
}

Méthode correcte:

//Works
var init = function() {
   console.log('document is ready');
}
$(document).ready(init);

Notez que $ (document) .ready (init) est placé à la fin.

1
Pramod

À la suite de Zakas ' L’art de jeter les erreurs JavaScript , j’ai commencé à utiliser mes propres erreurs en JavaScript pour trouver les problèmes JS.

Mais cette approche a malheureusement commencé à faire échouer les fonctions jQuery ready () de manière silencieuse, pour des parties non liées du site. :(

J'ai appris que ce qui suit est différent:

throw new Error()

est différent de

console.error()

Alors, j'ai commencé à utiliser console.error (), et j'ai toujours le surlignage rouge dans la console.

1
Michael R

Un autre point à vérifier: vous avez peut-être une erreur PHP dans votre programme. Une erreur PHP Fatal quitte le script et $(document).ready ne sera jamais exécuté.

En fonction de vos paramètres de serveur ou de votre CSS, le message Fatal error peut ne pas apparaître.

1
Adam

Dans mon cas, document.ready n'a pas été appelé car un formulaire HTML a été envoyé au serveur par une demande Ajax et seule une partie du document a été reçue - et le document prêt n'est pas appelé après la demande ajax.

En conséquence, certains boutons de la partie qui avait été rechargée n'étaient plus liés aux événements .click () atc .. car ils étaient nouveaux et que la liaison de ces événements était appelée lors de la préparation du document uniquement pour la première fois - pas pour AJAX.

0
Tomas Kubes

Je viens d'avoir cette image et cela s'est avéré être une faute d'orthographe dans le tag script

<script type="text/javscript">

Notez le 'a' manquant dans javascript. Changer pour simplement:

<script>

Correction du problème.

0
littledynamo