jquery 3.0 url.indexOf Fehler

210

Ich erhalte folgenden Fehler von jQuery, sobald es auf aktualisiert wurde v3.0.0.

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

Irgendeine Idee warum?

Kamrul
quelle
Überprüfen Sie dies, möglicherweise löst es Ihr Problem. Ungefangener Typfehler: Undefiniert ist keine Funktion in indexOf
Nalin Aggarwal
4
Es ist die neue Version von jQuery, die den Fehler auslöst. Alte Version ist in Ordnung.
Kamrul
Feek
Bitte erklären Sie die Antwort. Ich denke, es ist offensichtlich, dass wir eine haben
Mladen Janjetovic

Antworten:

546

Aktualisieren Sie Ihren gesamten Code, der loadwie folgt funktioniert:

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

Zu

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

jquery.js: 9612 Nicht erfasster TypeError: url.indexOf ist keine Funktion

Diese Fehlermeldung kommt von der jQuery.fn.loadFunktion.

Ich habe in meiner Bewerbung das gleiche Problem festgestellt. Nach einigem Graben fand ich diese Aussage im jQuery-Blog ,

.load, .unload und .error, die seit jQuery 1.8 veraltet sind , sind nicht mehr vorhanden . Verwenden Sie .on (), um Listener zu registrieren.

Ich ändere einfach, wie meine jQuery-Objekte die loadFunktion wie oben aufrufen . Und alles funktioniert wie erwartet.

vadi taslim
quelle
40
Es ist verrückt, dass sie auf dieser Seite in ihren Dokumenten api.jquery.com/load keine große veraltete Warnung haben .
James McMahon
3
Ich fand, dass dies genau das Problem war, das ich hatte, als ich zurbs Foundation in
Aurelia
5
irgendwie ironisch, dass der einzige Ort, an dem ich dies tatsächlich noch tat, der Fehlerbehandlungscode war, der sich dann selbst brach: - /
Simon_Weaver
1
Vielen Dank für diese perfekte Antwort
KCarnaille
Ich habe es in der document.readyFunktion verwendet und es funktioniert wie ein Zauber.
Neugier
29

Ein besserer Ansatz kann eine solche Polyfüllung sein

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

Damit können Sie den Legacy-Code unberührt lassen. Wenn Sie Webpack verwenden, müssen Sie den Script-Loader verwenden.

Korsmakolnikov
quelle
Vielen Dank. Ich habe immer noch einen Fehler, James schlug vor, dass Sie .trigger verwenden, das hat funktioniert. jQuery.fn.load = Funktion (Rückruf) {$ (Fenster) .trigger ("Laden", Rückruf); };
rgfx
Erstaunliche Lösung, wenn sie von JS von Drittanbietern verursacht wird. Ein weiteres Plus ist, dass kein Downgrade erforderlich ist, was zu Sicherheitslücken führt (in jeder jquery-Version unter 3!).
Mateusz
Diese Antwort ist König
Ntiyiso Rikhotso
16

Jquery 3.0 enthält einige wichtige Änderungen, mit denen bestimmte Methoden aufgrund von Konflikten entfernt werden. Ihr Fehler ist höchstwahrscheinlich auf eine dieser Änderungen zurückzuführen, z. B. auf das Entfernen des Ereignisses .load ().

Weitere Informationen finden Sie im jQuery Core 3.0-Upgrade-Handbuch

Um dies zu beheben, müssen Sie entweder den Code neu schreiben, um mit Jquery 3.0 kompatibel zu sein, oder Sie können das JQuery Migrate-Plugin verwenden, das die veralteten und / oder entfernten APIs und Verhaltensweisen wiederherstellt.

F3CP
quelle
4

Nach dem Update auf die neueste Version von JQuery ist derselbe Fehler aufgetreten. Daher aktualisiere ich die Jquery - Datei ich arbeite, wie in einer früheren Antwort angegeben, so sagte sie .on("load")statt .load().

Dieses Update ist nicht sehr stabil und manchmal hat es bei mir nicht funktioniert. Um dieses Problem zu beheben, sollten Sie Ihren Code daher aktualisieren von:

    .load();

zu

    .trigger("load");

Ich habe dieses Update von der folgenden Quelle erhalten: https://github.com/stevenwanderski/bxslider-4/pull/1024

James
quelle