Erreur "TypeError non capturée: a.indexOf n'est pas une fonction" lors de l'ouverture d'un nouveau projet de fondation

250

J'ai créé un nouveau projet Foundation 5 via bash, avec foundation new my-project. Lorsque j'ouvre le fichier index.html dans Chrome, une Uncaught TypeError: a.indexOf is not a functionerreur s'affiche dans la console, provenant de jquery.min.js:4.

J'ai créé le projet en suivant les étapes sur le site de la fondation, mais je n'arrive pas à me débarrasser de cette erreur. Foundation et jQuery semblent être inclus et correctement liés dans le fichier index.html, et le fichier app.js lié inclut$(document).foundation();

Quelqu'un sait-il ce qui cause cette erreur? et quelle solution pourrait être?

Capture d'écran du message d'erreur de la console

FreddieE
la source

Réponses:

820

Cette erreur peut être causée par les alias d'événements jQuery comme .load(), .unload()ou .error()que tous sont obsolètes depuis jQuery 1.8 . Recherchez ces alias dans votre code et remplacez-les à la .on()place par la méthode. Par exemple, remplacez l'extrait obsolète suivant:

$(window).load(function(){...});

avec ce qui suit:

$(window).on('load', function(){ ...});
Daniel Llano
la source
3
Je ne l'avais pas avec 2.2.1 @User, mais dès que je suis passé à 3.3.1, j'ai dû faire ce changement.
Codemonkey
@DanielLlano vous sauvez ma journée
Owaiz Yusufi
1
Cela m'a corrigé.
Radagast the Brown
@Crine $(function() {});est pour le document prêt, ce qui n'est pas la même chose que l'événement de chargement de fenêtre. De plus, doc ready se déclenche souvent avant le chargement de la fenêtre.
Robert
Bonjour mec, tu peux me dire pourquoi? avant de fonctionner avec la version 1.12.3 et il a cessé de fonctionner lorsque j'ai migré vers la 3.4.1
Armando Marques Sobrinho
35

Cette erreur est souvent causée par des versions de jQuery incompatibles . J'ai rencontré la même erreur avec un foundation 6référentiel. Mon référentiel utilisait jQuery 3, mais la fondation nécessite une version antérieure. Je l'ai ensuite changé et cela a fonctionné.

Si vous regardez la version de jQuery requise par les dépendances de la fondation 5, elle indique "jquery": "~2.1.0".

Pouvez-vous confirmer que vous chargez la bonne version de jQuery?

J'espère que ça aide.

shaune
la source
30

Veuillez ajouter ci-dessous le plugin jQuery Migrate

<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
<script src="https://code.jquery.com/jquery-migrate-1.4.1.min.js"></script>
Govarthanan Venunathan
la source
1
Je confirme que cela a résolu le problème.
Morad Hamdy
17

J'ai aussi fait face à ce problème. J'utilisais jquery.poptrox.min.jspour le saut d'image et le zoom et j'ai reçu une erreur qui disait:

Erreur «UnCaught TypeError: a.indexOf n'est pas une fonction» .

C'est parce que indexOfn'était pas pris en charge dans 3.3.1/jquery.min.jsune solution simple à cela est de le changer en une ancienne version 2.1.0/jquery.min.js.

Cela m'a arrangé.

Pantalon Harshit
la source
2
Je suis passé de 3.2.1 à 2.1.0 et cela a fonctionné. Cela a fonctionné pour moi.
Siddharth
Bienvenue ! @Siddharth
Harshit Pant
1
ne jamais revenir aux versions car cela peut entraîner des problèmes de sécurité majeurs.
Ajay Takur
1
Si tel est le cas: vous pouvez remplacer le code ci-dessous $ (window) .load (function () {...}); avec ce qui suit: $ (window) .on ('load', function () {...}); ça marcherait aussi! :)
Harshit Pant
13

L'une des raisons possibles est lorsque vous chargez jQuery TWICE , comme:

<script src='..../jquery.js'></script>
....
....
....
....
....
<script src='......./jquery.js'></script>

Vérifiez donc votre code source et supprimez la charge jQuery en double.

T.Todua
la source
2
Cela arrive avec wordpress, en chargeant sa propre version, si vous chargez également une version jquery de votre côté.
Olou
1

J'utilise jQuery 3.3.1et j'ai reçu la même erreur, dans mon cas, l'URL était une Objectvs une chaîne.

Ce qui s'est passé, c'est que j'ai pris URL = window.location- ce qui a rendu un objet. Une fois que je l'ai changé en window.location.href- cela a fonctionné sans l' e.indexOferreur.

Ricky Levi
la source
0

J'ai résolu cela en installant la version correcte de Jquerycelle que mon projet nécessitait en utilisantnpm

Ntiyiso Rikhotso
la source