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.