load() 方法已经过时了吗?

52

我正在浏览jQuery API,注意到load方法已被列入弃用列表。

分类:Deprecated | 事件 > 文档加载

我通常使用这种方法来检查图片是否完全加载。为什么它被弃用了?我应该使用什么代替它呢?


你把load方法load事件混淆了。如果要检查图片是否已加载,需要使用_事件_。 - Sparky
4
@Sparky,这里有一个名为load()方法,它注册了一个处理程序来处理load 事件(相当于 on("load") 的一种简写方式)。目前这个方法已经被废弃,建议使用on()代替。请注意使翻译内容更加通俗易懂,但不要改变原意。 - Frédéric Hamidi
1
是的,在SO上,吹毛求疵的技术语义是我们所做的,或者应该做的。 - Sparky
2
@Sparky,好的,我们再试一次。DOM层公开了一个load事件。jQuery提供了$.fn.load()方法来注册该事件的处理程序。该方法还有另一个用途(AJAX请求)。但那是一个方法,而不是事件(它可以被调用,事件只能被触发)。文档页面的名称为load-event以消除该方法的两个目的之间的歧义,但它仍然记录了一个方法 - Frédéric Hamidi
2
啊,是的@FrédéricHamidi,我明白了。没有异议。我总是通过文档中的描述来记住它,“将一个事件处理程序绑定到“load”JavaScript 事件上。”感谢您的详细解释。 - Sparky
显示剩余8条评论
3个回答

74

请参见bug#11733,其中记录了此弃用:

.load()方法是一个模糊的标识,它可能是ajax加载,也可能是附加/触发“load”事件。CCAO无法区分它们,因为这是基于参数的动态决策。

为避免与该方法签名相关的歧义,现在建议改用on()。例如:

$("selector").load(function() {
    // ...
});

应该变成:

$("selector").on("load", function() {
    // ...
});

并不是这样,on() 的使用一直都是这样的。它取代了 bind()delegate()live()。我认为自从 on() 函数被引入后,绑定事件和委托事件之间的区别(在注册方法方面)已经消失了。 - Frédéric Hamidi
我同意使用,但如果我有要加载的URL,那么我的代码是 $methods.load(url, function () { //do smething }); 其中method是一个具有HTML元素的变量,所以我想用以下方式重写它 $methods.on('load', url, function(){//do something}); 可悲的是它不起作用。 - VinK
它在控制台上显示语法错误,无法识别的表达式:URL。 - VinK

0

load函数在jQuery中已被弃用,你可以使用它的替代方法,例如:

$("iframe").on("load",function()
{
 
 alert("on loaded iframe");
 
}); 

这个适用于jquery-3.1.1。


-5

这不是替代品或好的解决方法来加载 -_-,请参见:http://api.jquery.com/one/ - Al-Mothafar
@Al-Mothafar 滚动事件绑定在至少某些平台场景浏览器中有效。 - Paul Sweatte
@Al-Mothafar 为什么你会期望 onload 会多次触发,需要使用 .one 呢? - NoBugs
@PaulSweatte 那篇链接的文章已经过时,第二篇已经不存在了,最后一篇也不应该与jQuery的load事件有关。尽管如此,在某些罕见情况下,iOS 8确实根本不会触发load事件。http://stackoverflow.com/questions/31744477/ - NoBugs
jquery 关于 load 的文档现在强调了它的缺陷,"需要注意的是,这里有几个已知的限制...." - Liam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接