Błąd „Uncaught TypeError: a.indexOf nie jest funkcją” podczas otwierania nowego projektu fundamentu

250

Stworzyłem nowy projekt Foundation 5 poprzez bash, z foundation new my-project. Gdy otwieram plik index.html w Chrome, Uncaught TypeError: a.indexOf is not a functionw konsoli pojawia się błąd, który pochodzi z jquery.min.js:4.

Stworzyłem projekt zgodnie z instrukcjami na stronie fundacji, ale nie mogę pozbyć się tego błędu. Foundation i jQuery wyglądają tak, jakby zostały poprawnie włączone i połączone w pliku index.html, a dołączony plik app.js zawiera$(document).foundation();

Czy ktoś wie, co powoduje ten błąd? i jakie może być rozwiązanie?

Zrzut ekranu komunikatu o błędzie konsoli

FreddieE
źródło

Odpowiedzi:

819

Ten błąd może być spowodowany aliasami zdarzeń jQuery, takimi jak .load(), .unload()lub .error()że wszystkie są przestarzałe od jQuery 1.8 . Wyszukaj te aliasy w kodzie i zastąp je .on()metodą. Na przykład zastąp następujący przestarzały fragment:

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

z następującymi:

$(window).on('load', function(){ ...});
Daniel Llano
źródło
3
Nie miałem go w 2.2.1 @User, ale jak tylko przełączyłem się na 3.3.1, musiałem dokonać tej zmiany.
Codemonkey
@DanielLlano ratujesz mój dzień
Owaiz Yusufi
1
Naprawiłem to dla mnie.
Radagast the Brown
@Crine $(function() {});jest gotowy do dokumentu, co nie jest tym samym, co zdarzenie ładowania okna. Ponadto funkcja doc ready często uruchamia się przed załadowaniem okna.
Robert
Witaj stary, czy możesz mi powiedzieć dlaczego? zanim działał z wersją 1.12.3 i przestał działać, kiedy przeprowadziłem migrację do 3.4.1
Armando Marques Sobrinho
35

Ten błąd jest często powodowany przez niekompatybilne wersje jQuery. Napotkałem ten sam błąd w foundation 6repozytorium. Moje repozytorium używało jQuery 3, ale podstawa wymaga wcześniejszej wersji. Potem to zmieniłem i zadziałało.

Jeśli spojrzysz na wersję jQuery wymaganą przez zależności fundamentalne 5 , stwierdza ona "jquery": "~2.1.0".

Czy możesz potwierdzić, że ładujesz poprawną wersję jQuery?

Mam nadzieję, że to pomoże.

Shaune
źródło
29

Dodaj poniżej wtyczkę migracyjną jQuery

<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
źródło
Potwierdzam, że to rozwiązało problem.
Morad Hamdy
17

Ja też stanąłem przed tym problemem. Używałem jquery.poptrox.min.jsdo obrazu popping oraz powiększanie i otrzymałem błąd, który powiedział:

Błąd „Uncaught TypeError: a.indexOf nie jest funkcją” .

Wynika to z faktu, że indexOfnie było obsługiwane w 3.3.1/jquery.min.jstak prostym rozwiązaniu, aby zmienić go na starą wersję 2.1.0/jquery.min.js.

Naprawiłem to dla mnie.

Harshit Pant
źródło
2
Przeszedłem do wersji 3.2.1 do 2.1.0 i zadziałało. To zadziałało dla mnie.
Siddharth,
Witamy ! @ Siddharth
Pant
1
nigdy nie wracaj do wersji, ponieważ może to spowodować poważne problemy z bezpieczeństwem.
Ajay Takur
1
W takim przypadku: możesz zastąpić poniższy kod $ (window) .load (function () {...}); z następującymi: $ (okno) .on ('load', function () {...}); to też działałoby! :)
Harshit Pant
13

Jednym z możliwych powodów jest to, kiedy ładowanie jQuery dwa razy , na przykład:

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

Sprawdź kod źródłowy i usuń zduplikowane ładowanie jQuery.

T.Todua
źródło
2
Dzieje się tak z wordpress, ładowaniem własnej wersji, jeśli ładujesz również wersję jquery po swojej stronie.
Olou
1

Używam jQuery 3.3.1i otrzymałem ten sam błąd, w moim przypadku adres URL toObject ciągiem vs.

To, co się stało, to wziąłem URL = window.location- co zwróciło przedmiot. Raz zmieniłem na window.location.href- działało bez e.indexOfbłędu.

Ricky Levi
źródło
0

Rozwiązałem ten problem, instalując poprawną wersję Jquerywymaganą przez mój projektnpm

Ntiyiso Rikhotso
źródło