jquery 3.0 url.indexOf错误

时间:2016-06-10 01:47:56

标签: jquery jquery-3

一旦更新到v3.0.0,我就会从jQuery中得到以下错误。

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

任何想法为什么?

5 个答案:

答案 0 :(得分:474)

更新所有调用load函数的代码,

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

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

jquery.js:9612 Uncaught TypeError:url.indexOf不是函数

此错误消息来自jQuery.fn.load函数。

我在申请时遇到了同样的问题。经过一番挖掘,我在jQuery blog

中找到了这个陈述
  

.load,.unload和.error,自jQuery 1.8以来已弃用,不再。   使用.on()注册监听器。

我只是简单地改变我的jQuery对象如上所述调用load函数的方式。一切都按预期工作。

答案 1 :(得分:20)

更好的方法可能是像这样的polyfill

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

通过这种方式,您可以保持遗留代码不受影响。 如果您使用webpack,请务必使用script-loader。

答案 2 :(得分:15)

Jquery 3.0有一些重大更改,会因冲突而删除某些方法。您的错误很可能是由于其中一个更改,例如删除了.load()事件。

jQuery Core 3.0 Upgrade Guide

中阅读更多内容

要解决此问题,您需要重写代码以与Jquery 3.0兼容,否则您可以使用JQuery Migrate plugin来恢复已弃用和/或删除的API和行为。

答案 3 :(得分:2)

在更新到最新版本的JQuery后,我遇到了同样的错误。因此,我更新了我正在处理的jquery文件,如上一个答案中所述,所以它说.on("load")而不是.load()

此修复程序不是很稳定,有时它对我不起作用。因此,要解决此问题,您应该更新您的代码:

    .load();

    .trigger("load");

我从以下来源获得此修复程序:https://github.com/stevenwanderski/bxslider-4/pull/1024

答案 4 :(得分:0)

@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();