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

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(){ ...});

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.


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>

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.


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.


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.


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.