jquery 3.0 url.indexOf erro

210

Estou recebendo o seguinte erro do jQuery depois que ele foi atualizado para v3.0.0.

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

Alguma idéia do porquê?

Kamrul
fonte
verificar isso, pode ser que resolve o seu problema Uncaught TypeError: Indefinido não é uma função em indexOf
Nalin Aggarwal
4
é a nova versão do jQuery disparando o erro. Versão antiga está bem.
Kamrul
estou encontrando isso agora também: 0
Feek
Por favor, declare a resposta. Eu acho que é óbvio que temos um #
Mladen Janjetovic 25/08

Respostas:

546

Atualize todo o seu código que chama loadfunção como,

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

Para

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

jquery.js: 9612 TypeError não capturado: url.indexOf não é uma função

Esta mensagem de erro vem da jQuery.fn.loadfunção.

Eu me deparei com o mesmo problema no meu aplicativo. Após algumas pesquisas, encontrei essa declaração no blog jQuery ,

.load, .unload e .error, obsoletos desde o jQuery 1.8, não são mais . Use .on () para registrar ouvintes.

Simplesmente mudo como meus objetos jQuery chamam a loadfunção como acima. E tudo funciona como esperado.

vadi taslim
fonte
40
É uma loucura que eles não tenham um grande aviso preterido nesta página em seus documentos, api.jquery.com/load .
James McMahon
3
Eu encontrei esta a ser o problema exato que eu estava tendo quando bootstrapping zurbs fundação em Aurelia
samuel.molinski
5
meio irônico que o único lugar que eu realmente ainda estava fazendo isso foi no código de manipulação de erros que se quebrou: - /
Simon_Weaver 12/12/16
1
Obrigado por isso, resposta perfeita
KCarnaille
Eu usei na document.readyfunção e está funcionando como um encanto.
Curiosidade
29

Uma abordagem melhor pode ser um polyfill como este

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

Com isso, você pode deixar o código legado intocado. Se você usa o webpack, certifique-se de usar o carregador de scripts.

Korsmakolnikov
fonte
Muito obrigado. Eu ainda tenho um erro, James sugeriu que você usasse .trigger isso funcionou. jQuery.fn.load = function (retorno de chamada) {$ (window) .trigger ("load", retorno de chamada); };
rgfx
Solução surpreendente quando causada por JS de terceiros. Outra vantagem é que ele não requer um downgrade, o que causará vulnerabilidade (em qualquer versão do jquery abaixo de 3!).
Mateusz
Esta resposta é rei
Ntiyiso Rikhotso 26/06/19
16

O Jquery 3.0 tem algumas alterações que removem certos métodos devido a conflitos. Seu erro provavelmente ocorre devido a uma dessas alterações, como a remoção do evento .load ().

Leia mais no Guia de atualização jQuery Core 3.0

Para corrigir isso, você precisa reescrever o código para ser compatível com o Jquery 3.0 ou usar o plug-in JQuery Migrate, que restaura as APIs e os comportamentos descontinuados e / ou removidos.

F3CP
fonte
4

Me deparei com o mesmo erro depois de atualizar para a versão mais recente do JQuery. Portanto, atualizei o arquivo jquery em que estava trabalhando, conforme declarado em uma resposta anterior, e disse em .on("load")vez de .load().

Essa correção não é muito estável e às vezes não funcionou para mim. Portanto, para corrigir esse problema, você deve atualizar seu código de:

    .load();

para

    .trigger("load");

Eu obtive essa correção da seguinte fonte: https://github.com/stevenwanderski/bxslider-4/pull/1024

James
fonte