251 votes

erreur jquery 3.0 url.indexOf

Je reçois l'erreur suivante de jQuery une fois qu'il a été mis à jour à v3.0.0 .

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

Une idée de la raison ?

0 votes

Vérifiez ceci, cela résoudra peut-être votre problème. Erreur de type non résolue : Undefined n'est pas une fonction sur indexOf

4 votes

C'est la nouvelle version de jQuery qui provoque l'erreur. L'ancienne version est correcte.

0 votes

C'est aussi le cas en ce moment :0

645voto

choz Points 1665

Mise à jour tout votre code qui appelle load comme,

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

Pour

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

jquery.js:9612 Uncaught TypeError : url.indexOf n'est pas une fonction

Ce message d'erreur provient de jQuery.fn.load fonction.

J'ai rencontré le même problème avec mon application. Après avoir creusé un peu, j'ai trouvé cette déclaration dans blog jQuery ,

.load, .unload, et .error, obsolètes depuis jQuery 1.8, ne sont plus . Utilisez .on() pour enregistrer des récepteurs.

Je modifie simplement la façon dont mes objets jQuery appellent la fonction load comme ci-dessus. Et tout fonctionne comme prévu.

47 votes

C'est fou qu'il n'y ait pas un gros avertissement sur cette page dans leur documentation, api.jquery.com/load .

3 votes

J'ai trouvé que c'était exactement le problème que je rencontrais lorsque je bootstrapais zurbs foundation dans aurelia

5 votes

Il est assez ironique de constater que le seul endroit où je faisais encore cela était dans un code de gestion des erreurs qui s'est ensuite cassé tout seul :-/

37voto

Korsmakolnikov Points 306

Une meilleure approche pourrait être un polyfill comme celui-ci

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

Cela permet de ne pas toucher au code existant. Si vous utilisez webpack, assurez-vous d'utiliser script-loader.

1 votes

Merci beaucoup. J'ai toujours une erreur, James a suggéré d'utiliser .trigger, ce qui a fonctionné. jQuery.fn.load = function (callback) {$(window).trigger("load", callback) ; } ;

0 votes

Solution étonnante lorsqu'elle est causée par un JS tiers. Un autre avantage est qu'il ne nécessite pas de downgrade, ce qui causerait une vulnérabilité (dans toutes les versions de jquery inférieures à 3 !).

0 votes

Cette réponse est royale

16voto

F3CP Points 374

La version 3.0 de Jquery comporte des changements radicaux qui suppriment certaines méthodes en raison de conflits. Votre erreur est très probablement due à l'un de ces changements, comme la suppression de l'événement .load().

Plus d'informations dans le Guide de mise à jour de jQuery Core 3.0

Pour remédier à ce problème, vous devez réécrire le code pour le rendre compatible avec Jquery 3.0 ou vous pouvez utiliser l'option Plugin JQuery Migrate qui rétablit les API et les comportements dépréciés et/ou supprimés.

6voto

James Points 31

Je suis tombé sur le même message d'erreur après la mise à jour vers la dernière version de JQuery. Donc j'ai mis à jour le fichier jquery, j'ai été travailler sur, comme indiqué dans une précédente réponse, donc il l'a dit .on("load") au lieu de .load().

Ce correctif n'est pas très stable, et, parfois, il ne fonctionne pas pour moi. Par conséquent, pour résoudre ce problème, vous devez mettre à jour votre code à partir de:

    .load();

pour

    .trigger("load");

J'ai eu ce correctif à partir de la source suivante: https://github.com/stevenwanderski/bxslider-4/pull/1024

0voto

pleinx Points 597

La réponse de @choz est la bonne. Si vous avez beaucoup d'utilisations et que vous voulez vous assurer que cela fonctionne partout sans changements, vous pouvez ajouter ces petits snippets de migration :

/* Migration jQuery from 1.8 to 3.x */
jQuery.fn.load = function (callback) {
    var el = $(this);

    el.on('load', callback);

    return el;
};

Dans ce cas, vous n'avez pas obtenu d'erreurs sur d'autres nœuds, par exemple sur $image comme dans la réponse de @Korsmakolnikov !

const $image = $('img.image').load(function() {
  $(this).doSomething();
});

$image.doSomethingElseWithTheImage();

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X