Błąd jquery 3.0 url.indexOf


210

Otrzymuję następujący błąd z jQuery po aktualizacji do v3.0.0.

jquery.js:9612 Uncaught TypeError: url.indexOf is not a function

Masz pomysł, dlaczego?



4
to nowa wersja jQuery uruchamiająca błąd. Stara wersja jest w porządku.
Kamrul

napotykam też na to teraz: 0
Feek

Proszę zadeklarować odpowiedź. Myślę, że to oczywiste, że mamy taką
Mladen Janjetovic

Odpowiedzi:


546

Zaktualizuj cały kod, który wywołuje loadtakie funkcje,

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

Do

$(window).on('load', function() { ... });

jquery.js: 9612 Uncaught TypeError: url.indexOf nie jest funkcją

Ten komunikat o błędzie pochodzi z jQuery.fn.loadfunkcji.

W mojej aplikacji napotkałem ten sam problem. Po kilku kopaniach znalazłem to oświadczenie na blogu jQuery ,

.load, .unload i .error, przestarzałe od jQuery 1.8, już nie są . Użyj .on (), aby zarejestrować słuchaczy.

Po prostu zmieniam sposób, w jaki moje obiekty jQuery wywołują loadfunkcję jak wyżej. I wszystko działa zgodnie z oczekiwaniami.


40
To szalone, że nie mają dużego przestarzałego ostrzeżenia na tej stronie w swoich dokumentach, api.jquery.com/load .
James McMahon,

3
Przekonałem się, że jest to dokładny problem, jaki miałem, gdy ładowałem Zurbs Foundation do
aurelii

5
trochę ironiczne, że jedynym miejscem, w którym wciąż to robiłem, był kod obsługi błędów, który potem sam się zepsuł: - /
Simon_Weaver 12.12.16

1
Dzięki za to, idealna odpowiedź
KCarnaille

Użyłem go w document.readyfunkcji i działa jak urok.
Ciekawość,

29

Lepszym podejściem może być takie wypełnienie

jQuery.fn.load = function(callback){ $(window).on("load", callback) };

Dzięki temu możesz pozostawić dotychczasowy kod nietknięty. Jeśli używasz webpacka, pamiętaj o użyciu programu ładującego skrypty.


Dzięki wielkie. Nadal mam błąd, James zasugerował, aby użyć .trigger działało. jQuery.fn.load = function (callback) {$ (window) .trigger ("load", callback); };
rgfx

Niesamowite rozwiązanie, gdy jest spowodowane przez JS innej firmy. Kolejnym plusem jest to, że nie wymaga obniżenia wersji, co spowoduje podatność (w każdej wersji jquery poniżej 3!).
Mateusz

Ta odpowiedź jest królem
Ntiyiso Rikhotso

16

Jquery 3.0 ma kilka przełomowych zmian, które usuwają niektóre metody z powodu konfliktów. Twój błąd jest najprawdopodobniej spowodowany jedną z tych zmian, takich jak usunięcie zdarzenia .load ().

Przeczytaj więcej w Przewodniku aktualizacji jQuery Core 3.0

Aby to naprawić, musisz przepisać kod, aby był zgodny z Jquery 3.0, albo możesz użyć wtyczki JQuery Migrate, która przywraca przestarzałe i / lub usunięte interfejsy API i zachowania.


4

Ten sam błąd napotkałem po aktualizacji do najnowszej wersji JQuery. Dlatego zaktualizowałem plik jquery, nad którym pracowałem, jak stwierdzono w poprzedniej odpowiedzi, więc powiedział on .on("load")zamiast .load().

Ta poprawka nie jest zbyt stabilna i czasami nie działała dla mnie. Dlatego, aby rozwiązać ten problem, należy zaktualizować kod z:

    .load();

do

    .trigger("load");

Mam tę poprawkę z następującego źródła: https://github.com/stevenwanderski/bxslider-4/pull/1024

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.