2016-06-10 10 views
142

Otrzymuję następujący błąd z jQuery po zaktualizowaniu do v3.0.0.jquery 3.0 url.indexOf error

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

jakiś pomysł dlaczego?

+0

Sprawdź to, może to rozwiązać problem [Uncaught TypeError: Undefined nie jest funkcją w indexOf] (http: // stackoverflow.com/questions/24471229/uncaught-typeerror-undefined-is-not-a-function-on-indexof) –

+3

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

+0

Jestem również w tej chwili: 0 – Feek

Odpowiedz

357

Aktualizacja cały kod, który wywołuje load jak funkcja,

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

Aby

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

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

Ten komunikat o błędzie pochodzi zFunkcja.

Znalazłem ten sam problem w mojej aplikacji. Po pewnym kopania, znalazłem to oświadczenie w jQuery blog,

.load, .unload, and .error, deprecated since jQuery 1.8, are no more. Use .on() to register listeners.

ja po prostu tylko zmienić sposób moje obiekty jQuery wywołać funkcję load jak powyżej. A wszystko działa zgodnie z oczekiwaniami.

+24

To szaleństwo, że nie mają one wielkiego przestarzałego ostrzeżenia na tej stronie w swoich dokumentach, http://api.jquery.com/load/. –

+1

Stwierdziłem, że to był dokładny problem, który miałem podczas ładowania podstawy zurbs do aurelii –

+2

ironicznie, że jedynym miejscem, w którym wciąż to robiłem, był kod błędu, który następnie sam się zepsuł: -/ –

12

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().

Czytaj więcej w jQuery Core 3.0 Upgrade Guide

Aby rozwiązać ten problem należy albo przepisać kod za zgodną z jQuery 3.0 albo można użyć JQuery Migrate plugin który przywróci przestarzałe i/lub usunięte API i zachowań.

2

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

Ta poprawka nie jest bardzo stabilna i czasami nie działała dla mnie. Dlatego, aby rozwiązać ten problem, który powinien aktualizacja kod z:

.load(); 

do

.trigger("load"); 

dostałam tę poprawkę z poniższego źródło: https://github.com/stevenwanderski/bxslider-4/pull/1024

12

Lepsze podejście może stanowić polyfill jak ten

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

Dzięki temu możesz pozostawić dotychczasowy kod niezmieniony. Jeśli używasz WebPacka, upewnij się, że używasz skrypt-programu ładującego.

+0

Dziękuję bardzo. Nadal mam błąd, James zasugerował, żebyś użył. Trigger to zadziałało. jQuery.fn.load = function (callback) {$ (window) .trigger ("load", callback); }; – rgfx

+1

Dzięki! To działa dla mnie. –