Ошибка «Uncaught TypeError: a.indexOf не является функцией» при открытии нового базового проекта

250

Я создал новый проект Foundation 5 через bash, с foundation new my-project. Когда я открываю файл index.html в Chrome, Uncaught TypeError: a.indexOf is not a functionв консоли отображается ошибка, происходящая из jquery.min.js:4.

Я создал проект, следуя инструкциям на базовом сайте, но не могу избавиться от этой ошибки. Foundation и jQuery выглядят так, как будто они включены и правильно связаны в файле index.html, а связанный файл app.js включает$(document).foundation();

Кто-нибудь знает, что вызывает эту ошибку? и какое решение может быть?

Скриншот сообщения об ошибке консоли

FreddieE
источник

Ответы:

820

Эта ошибка может быть вызвана псевдонимами событий jQuery, например .load(), .unload()или тем, .error()что все они устарели с jQuery 1.8 . Найдите эти псевдонимы в своем коде и замените их .on()методом. Например, замените следующую устаревшую выдержку:

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

со следующим:

$(window).on('load', function(){ ...});
Даниэль Ллано
источник
3
У меня не было этого с 2.2.1 @User, но как только я перешел на 3.3.1, мне пришлось внести это изменение.
Codemonkey
@DanielLlano ты спасешь мой день
Оваиз Юсуфи
1
Это исправило это для меня.
Радагаст Браун
@Crine $(function() {});для готового документа, что не то же самое, что событие загрузки окна. Кроме того, готовый документ часто срабатывает перед загрузкой окна.
Роберт
Привет человек, не могли бы вы сказать мне, почему? до того, как он работал с версией 1.12.3 и перестал работать, когда я перешел на 3.4.1
Armando Marques
35

Эта ошибка часто вызывается несовместимыми версиями jQuery. Я столкнулся с той же ошибкой с foundation 6хранилищем. Мой репозиторий использовался jQuery 3, но фонд требует более ранней версии. Затем я изменил это, и это сработало.

Если вы посмотрите на версию jQuery, которая требуется для зависимостей Foundation 5, то она заявляет "jquery": "~2.1.0".

Вы можете подтвердить, что загружаете правильную версию jQuery?

Надеюсь, это поможет.

shaune
источник
30

Пожалуйста, добавьте ниже плагин 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>
Говартанан Венунатан
источник
1
Я подтверждаю, что это решило проблему.
Морад Хамди
17

Я тоже столкнулся с этой проблемой. Я использовал jquery.poptrox.min.jsдля выталкивания изображения и масштабирования, и я получил сообщение об ошибке:

Ошибка «Uncaught TypeError: a.indexOf не является функцией» .

Это потому, что indexOfне было поддержано в 3.3.1/jquery.min.jsпростом исправлении, чтобы изменить его на старую версию 2.1.0/jquery.min.js.

Это исправило это для меня.

Harshit Pant
источник
2
Я перешел на 3.2.1 до 2.1.0 и все заработало. Это сработало для меня.
Сиддхарт
Добро пожаловать @Siddharth
Harshit Pant
1
никогда не возвращайтесь к версиям, так как это может привести к серьезным проблемам с безопасностью.
Аджай Такур
1
Если это так: вы можете заменить приведенный ниже код $ (window) .load (function () {...}); со следующим: $ (window) .on ('load', function () {...}); это также будет работать! :)
Harshit Pant
13

Одна из возможных причин - когда вы загружаете jQuery ДВАЖДЫ , например:

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

Итак, проверьте ваш исходный код и удалите дублирующую загрузку jQuery.

T.Todua
источник
2
Это происходит с WordPress, загружая свою собственную версию, если вы также загружаете версию JQuery на вашей стороне.
Olou
1

Я использую, jQuery 3.3.1и я получил ту же ошибку, в моем случае URL был Objectстрокой.

Произошло то, что я взял URL = window.location- что вернул предмет. Как только я изменил это window.location.href- это работало без e.indexOfошибки.

Рики Леви
источник
0

Я решил это, установив правильную версию, Jqueryкоторую мой проект требовал с помощьюnpm

Нтийо Рихоцо
источник