jquery与图片onload事件不得不说的故事

最近的项目涉及到图片的onload事件,问题看起来挺简单的,做起来确是问题多多

首先,onload事件需在图片载入前绑定好,onload事件不能冒泡,所以不能用jquery的live绑定

这里特别要提的一点是,如果img是一个普通的image对象,在有onload的情况下,不可用以下方法将其添加到DOM中,如:

$('body').append($(img));或者$('body').append('<img src="" οnlοad="" />');

这样子的话,图片的onload事件会触发多次,因为jquery的append方法的机制是先添加到DOM中,再删除

不过例如$('<img src="" οnlοad="" />')之类的也是同样道理。

所以在用jquery处理带有onload事件的图片时,需小心对待。

解决方法有:

1、在载入onload事件后,移出图片的onload事件。

img.onload = function(){
    img.onload = null;
    img.setAttribute && img.setAttribute('onload', null);
    //这里千万不能使用$(img),否者会陷入死循环
}

2、使用append的时候应这样写代码

原来的:

var html =  '<img src="" onload="" />';
var img = $(html);
$('body').append(img);
现在的,避免多次使用$方法初始化图片:
var html =  '<img src="" onload="" />';
$('body').append(html);


转载于:https://my.oschina.net/arrowing/blog/110048

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值