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.