一旦更新到v3.0.0
,我就会从jQuery中得到以下错误。
jquery.js:9612 Uncaught TypeError: url.indexOf is not a function
任何想法为什么?
答案 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();