load() 方法已弃用?

Posted

技术标签:

【中文标题】load() 方法已弃用?【英文标题】:load() method deprecated? 【发布时间】:2012-09-20 12:35:24 【问题描述】:

我在浏览 jQuery api 时发现 load method 在已弃用列表中。

类别:已弃用 |事件 > 文档加载

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

【问题讨论】:

可能是因为它与更早执行的$(document).ready 混淆了? @Sparky,有一个load() 方法load 事件注册一个处理程序(on("load")的快捷方式) .现在确实不推荐使用该方法,而支持on() 是的,在 SO,挑剔技术语义是我们所做的,或者应该做的。 @Sparky,好的,让我们再试一次。 DOM 层公开了一个load 事件。 jQuery 提供了$.fn.load() 方法 来为该事件注册一个处理程序。该方法还有另一个用途(AJAX 请求)。但那是方法,不是事件(可以调用,事件不能调用,只能触发)。文档页面被命名为load-event 以消除该方法的两个用途之间的歧义,但它仍然记录了一个方法 啊,是的@FrédéricHamidi,我明白了。没有异议。我一直记得它在docs 中的描述,“将 event 处理程序绑定到“加载”javascript event。”。谢谢你的详细解释。 【参考方案1】:

在 jQuery 中弃用的加载函数替代它是你可以使用的,就像

$("iframe").on("load",function()

	
	alert("on loaded iframe");
	
);	

这项工作非常适合 jquery-3.1.1。

【讨论】:

【参考方案2】:

如果load 没有按预期工作,替代方法是:

$(window).one("scroll", foo);

或者

$(window).one("scroll", function()/*...*/);

具体来说,当DOMContentLoaded 无法按预期工作时,滚动事件绑定在android 中很有用,而当onreadystatechange 无法按预期工作时,滚动事件绑定在Android 中很有用。

参考文献

Android DOM Finger Events

IE implementation of DOMContentLoaded failing when no assets

IE < 9 Hack for a Document not inside a frame

【讨论】:

它不是负载的替代品或好的解决方法 -_- ,请参阅:api.jquery.com/one @Al-Mothafar Scroll 事件绑定至少在某些platforms、scenarios 和browsers 中有效。 @Al-Mothafar 为什么你会期望 onload 触发多次,使得 .one 成为必要? @PaulSweatte 链接的一篇文章是旧的,第二篇已经没有了,最后一篇应该与 jQuery 的加载事件无关。确实,iOS 8 在极少数情况下根本不会触发 load 事件。 ***.com/questions/31744477 jquery docs on load 现在强调它的失败之处,“有几个已知的警告应该注意......”【参考方案3】:

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

.load() 方法是一个模棱两可的签名,它可以是 ajax 加载或附加/触发“加载”事件。 CCAO 无法区分它们,因为 这是一个基于参数的动态决定。

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

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

应该变成:

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

【讨论】:

并非如此,on() 总是打算这样使用。它取代了bind() 以及delegate()live()。我想说自从引入on() 以来,绑定事件和委托事件之间的区别(在注册方法方面)已经消失。 我同意使用,但是如果我有要加载的 URL 怎么办,所以我的代码是 $methods.load(url, function () //do smething );其中方法是具有 html 元素的变量,所以我想用 $methods.on('load', url, function()//do something);可悲的是它不工作 它给出了语法错误的控制台错误,无法识别的表达式:到 URL

以上是关于load() 方法已弃用?的主要内容,如果未能解决你的问题,请参考以下文章

jQuery:替换已弃用的“.load()”? [复制]

Modernizr.load 已弃用。 Yepnope.js 已弃用。怎么办?

如何替换已弃用的 imp.load_dynamic 的用法?

OnActivityResult 方法已弃用,有啥替代方法?

如何解决弃用警告“方法 to_hash 已弃用并将在 Rails 5.1 中删除”

方法 setDrawerListener 已弃用