Erro "TypeError não detectado: a.indexOf não é uma função" ao abrir novo projeto de fundação

250

Eu criei um novo projeto da Foundation 5 através do bash, com foundation new my-project. Quando abro o arquivo index.html no Chrome, um Uncaught TypeError: a.indexOf is not a functionerro é mostrado no console, originário de jquery.min.js:4.

Criei o projeto seguindo as etapas no site de fundação, mas não consigo me livrar desse erro. O Foundation e o jQuery parecem estar incluídos e vinculados corretamente no arquivo index.html, e o arquivo app.js vinculado está incluindo$(document).foundation();

Alguém sabe o que está causando esse erro? e que solução pode ser?

Captura de tela da mensagem de erro do console

FreddieE
fonte

Respostas:

819

Esse erro pode ser causado pelos aliases de eventos do jQuery .load(), como , .unload()ou .error()que todos foram descontinuados desde o jQuery 1.8 . Procure esses aliases no seu código e substitua-os pelo .on()método. Por exemplo, substitua o seguinte trecho obsoleto:

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

com o seguinte:

$(window).on('load', function(){ ...});
Daniel Llano
fonte
3
Eu não o tinha com o 2.2.1 @User, mas assim que mudei para o 3.3.1 tive que fazer essa alteração.
Codemonkey 28/08/19
@DanielLlano you save my day
Owaiz Yusufi
1
Isso consertou para mim.
Radagast the Brown
@Crine $(function() {});é para documentos prontos, o que não é a mesma coisa que o evento de carregamento da janela. Além disso, o doc ready geralmente é acionado antes do carregamento da janela.
Robert
Olá cara, você poderia me dizer por quê? antes que ele estava trabalhando com a versão 1.12.3 e ele parou de funcionar quando eu migrou para 3.4.1
Armando Marques Sobrinho
35

Esse erro geralmente é causado por versões incompatíveis do jQuery. Encontrei o mesmo erro em um foundation 6repositório. Meu repositório estava usando jQuery 3, mas o fundamento requer uma versão anterior. Eu então mudei e funcionou.

Se você observar a versão do jQuery requerida pelas 5 dependências da fundação, ela declara "jquery": "~2.1.0".

Você pode confirmar que está carregando a versão correta do jQuery?

Eu espero que isso ajude.

shaune
fonte
29

Adicione abaixo o plug-in jQuery Migrate

<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
<script src="https://code.jquery.com/jquery-migrate-1.4.1.min.js"></script>
Govarthanan Venunathan
fonte
Confirmo que isso corrigiu o problema.
Morad Hamdy
17

Eu também enfrentei esse problema. Eu estava usando jquery.poptrox.min.jspara ampliar e ampliar a imagem e recebi um erro que dizia:

Erro "TypeError não capturado: a.indexOf não é uma função" .

Isso ocorre porque indexOfnão há suporte 3.3.1/jquery.min.jspara que uma correção simples seja alterada para uma versão antiga 2.1.0/jquery.min.js.

Isso consertou para mim.

Harshit Pant
fonte
2
Mudei para o 3.2.1 para o 2.1.0 e funcionou. Isso funcionou para mim.
Siddharth
Bem-vinda ! @Siddharth
Harshit Pant
1
nunca volte para versões, pois isso pode resultar em problemas de segurança importantes.
Ajay Takur 03/03
1
Se for esse o caso: você pode substituir o código abaixo $ (window) .load (function () {...}); com o seguinte: $ (window) .on ('load', function () {...}); isso também funcionaria! :)
Harshit Pant
13

Um dos possíveis motivos é quando você carrega o jQuery DUAS VEZES , como:

<script src='..../jquery.js'></script>
....
....
....
....
....
<script src='......./jquery.js'></script>

Portanto, verifique seu código-fonte e remova a carga duplicada do jQuery.

T.Todua
fonte
2
Isso acontece com o wordpress, carregando sua própria versão, se você também estiver carregando uma versão jquery do seu lado.
Olou
1

Estou usando jQuery 3.3.1e recebi o mesmo erro; no meu caso, o URL era uma Objectstring vs.

O que aconteceu foi que eu peguei URL = window.location- que retornou um objeto. Depois que eu mudei para window.location.href- funcionou sem o e.indexOferro.

Ricky Levi
fonte
0

Resolvi isso instalando a versão correta Jqueryque meu projeto exigia usandonpm

Ntiyiso Rikhotso
fonte