Я получаю следующую ошибку от jQuery после его обновления до v3.0.0.

jquery.js: 9612 Uncaught TypeError: url.indexOf не является функцией

Любая идея, почему?

Kamrul

Ответов: 5

Ответы (5)

Обновите весь ваш код, который вызывает load, например,

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

Кому

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

jquery.js: 9612 Uncaught TypeError: url.indexOf не является функцией

Это сообщение об ошибке исходит от функции jQuery.fn.load.

Я столкнулся с той же проблемой в своем приложении. Покопавшись, я нашел этот оператор в блоге jQuery,

.load, .unload и .error, устаревшие с jQuery 1.8, больше не. Используйте .on () для регистрации слушателей.

Я просто меняю способ вызова моих объектов jQuery функции load, как указано выше. И все работает как положено.

JQuery 3.0 имеет некоторые критические изменения, которые удаляют определенные методы из-за конфликтов. Ваша ошибка, скорее всего, связана с одним из этих изменений, например удалением события .load ().

Подробнее см. Руководство по обновлению jQuery Core 3.0

Чтобы исправить это, вам нужно либо переписать код, чтобы он был совместим с JQuery 3.0, либо вы можете использовать JQuery Migrate plugin, который восстанавливает устаревшие и / или удаленные API и поведение.

Лучшим подходом может быть такой полифилл

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

При этом вы можете оставить прежний код нетронутым. Если вы используете webpack, обязательно используйте скрипт-загрузчик.

Я столкнулся с той же ошибкой после обновления до последней версии JQuery. Поэтому я обновил файл jquery, над которым работал, как указано в предыдущем ответе, поэтому он сказал .on ("load") вместо .load ().

Это исправление не очень стабильно, и иногда оно не помогало мне. Поэтому, чтобы исправить эту проблему, вы должны обновить свой код с:

    .load();

на

    .trigger("load");

Я получил это исправление из следующего источника: https://github.com/stevenwanderski/bxslider-4/pull/1024

@ choz ответ правильный. Если у вас много применений и вы хотите убедиться, что он работает везде без изменений, вы можете добавить этот небольшой фрагмент миграции:

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

    el.on('load', callback);

    return el;
};

В этом случае у вас нет ошибок на других узлах, например. на $ image как в ответе @Korsmakolnikov!

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

$image.doSomethingElseWithTheImage();

2022 WebDevInsider