检测jQuery 1.8+中的图像加载 - 替代load()方法,因为它已被弃用

5

解释

出于我所理解的原因,从jQuery 1.8开始,load事件已被弃用,但是,仍然可以通过某些变通方法检测图像是否已加载(即使它在缓存中)。因此,事件的弃用实际上很烦人,因为它至少是检测图像何时完成加载到页面的起点。

尽管如此,它已被弃用,因此我提出了这个问题,希望能找到答案,从而帮助我和可能很快遇到同样问题的其他人。

示例(jQuery 1.8之前)

不使用插件(因为应该能够只用很少的代码来完成,因此插件是不必要的),我想在每个图像加载完成后调用一个函数。

类似这样(由于已经弃用,无法工作):

$('#mn_content .column').on('load','img',function(){
    console.log('loaded');  
})

我的问题

现在load事件不再存在,有人知道如何实现吗?

请注意:如果现在实现的唯一方法是使用Javascript中的new Image对象,那么请不要浪费时间帮助我,因为其他人比我更需要您的帮助。我能够编写此代码,只是对于如此基本的内容来说,它似乎有点冗长。

我只是想确认是否有一种不使用Javascript image对象就可以实现这个目标的方法。

当然,如果有任何帮助,我会非常感激,但当有其他需要您帮助的人时,我不想让您在我身上花费太多时间。 :-)


4
你的.each明显只迭代了文档本身,而没有委托给定的目标。 - Fabrício Matté
@FabrícioMatté 这是一个非常好的观点,请忽略它。那不是我使用的代码,我编写它只是为了说明目的,并没有测试它。但是很注意到了,+1 :-) - Ben Carey
可能是load()方法已弃用?的重复问题。 - Hannele
1个回答

4
“load”事件仍然存在,但你不能再使用“.load”进行绑定了。如果你的浏览器支持“load”事件的冒泡,你的事件委托示例应该可以一直使用到1.9和2.0版本。
我个人会使用新的Image方法,因为我不相信所有浏览器都能正确地冒泡“load”事件。
编辑:抱歉如果我表达不清,我的意思是“load”事件仍然存在,只是你必须正确地绑定它。由于“load”事件并不在所有浏览器中都有冒泡(如果有的话?),你必须直接将事件绑定到图像上。我建议使用你要求我们不提供示例的方法。

我以为可能是这样,但出于某种原因它在我的脚本中没有起作用。我已经调试了我的代码,虽然没有太多需要调试的地方,但我无法让它工作。我将使用我的实际代码更新我的问题。感谢您的回答 :-) - Ben Carey
1
请查看您问题下的评论,您在 .each() 上的逻辑不正确,:) - Kevin B
1
而且,正如Kevin所说,如果浏览器不冒泡load事件,您的委托处理程序将无法触发。 - Fabrício Matté
@KevinB 你确定 load 事件仍然存在吗?我已经创建了下面的 jsFiddle,但它根本不起作用...有什么想法吗?http://jsfiddle.net/ajc7J/1/ - Ben Carey
那仍然使用事件委托,需要事件冒泡。加载事件不会冒泡。请参见此处:http://jsfiddle.net/ajc7J/2/ - Kevin B
显示剩余7条评论

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