关于IE中image的onload事件失效解决问题

这两天做一个简单的图片查看器,其中用到了“上一页”和“下一页”,加载图片的时候用new Image(),然后设置image的src属性,在Google Chrome/Opera/FireFox中一切正常;代码如下:

1 var i = new Image();
2 i.src = _this.settings.imgs[_this.currIndex];
3 //baidu.dom.show(baidu.dom.query(selectPre+'#loading')[0]);
4 i.onload = function(){
5     image.src = i.src;
6     baidu.dom.hide(baidu.dom.query(selectPre+'#loading')[0]);
7     baidu.dom.query('#'+_this.settings.formId+' .title')[0].innerHTML = i.src.replace(/(.*\/)/ig,'') + ' - '+_this.settings.title;
8 }

测试结果:

可是到了IE8/IE7中,问题出现了:当所有图片一次翻完或者刷新浏览器后,点击后图片就 不显示了,下面是刷新后的结果(红色的图片是loading图标):

难道是Image对象的onload失效了?当我试图在onload事件中弹出对话框时,IE中无效,也就证实了onload事件没有发生。网上搜索了下资料:

IE在再次显示图片的时候不是从服务器发来的图片,而是从缓存中获取上次缓存的,这样从缓存中加载的速度是很快的,所以还没有运行到onload的时候,onload事件已经触发了,这就导致onload事件中的代码无法执行了。

既然这样,那我们就可以把onload事件函数写到给src赋值的语句前面,这样就解决了问题,代码如下:

var i = new Image();
//baidu.dom.show(baidu.dom.query(selectPre+'#loading')[0]);
i.onload = function(){
    image.src = i.src;
    //baidu.dom.hide(baidu.dom.query(selectPre+'#loading')[0]);
    //baidu.dom.query('#'+_this.settings.formId+' .title')[0].innerHTML = i.src.replace(/(.*\/)/ig,'') + ' - '+_this.settings.title;
}      
i.src = _this.settings.imgs[_this.currIndex];

嘿嘿,实际中遇到了一些奇怪的问题,记录一下。

转载于:https://www.cnblogs.com/love17914/archive/2012/08/25/2657011.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
移动端iOS系统onload事件失效问题可能是由于移动端浏览器的机制不同于桌面端浏览器,导致onload事件无法触发。此外,iOS系统的Safari浏览器还存在一些特殊的问题,如页面缓存、用户手势等问题,也可能导致onload事件失效解决这个问题的方法有多种,以下是一些常见的解决方法: 1. 使用window.onload事件代替onload事件 在移动端iOS系统,window.onload事件可以替代onload事件,可以使用以下代码: ``` window.onload = function() { // Your code here }; ``` 2. 使用DOMContentLoaded事件 DOMContentLoaded事件会在DOM树结构构建完成后触发,不受页面资源加载的影响。可以使用以下代码: ``` document.addEventListener('DOMContentLoaded', function() { // Your code here }, false); ``` 3. 使用$(document).ready()事件 如果您使用jQuery库,可以使用$(document).ready()事件来代替onload事件。可以使用以下代码: ``` $(document).ready(function() { // Your code here }); ``` 4. 禁用页面缓存 iOS系统的Safari浏览器会将页面缓存下来,如果您的页面有缓存,onload事件可能不会触发。可以在HTML头部添加以下标签来禁用页面缓存: ``` <meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate"> <meta http-equiv="Pragma" content="no-cache"> <meta http-equiv="Expires" content="0"> ``` 5. 禁用用户手势 在iOS系统的Safari浏览器,用户手势会触发页面刷新,导致onload事件失效。可以使用以下代码禁用用户手势: ``` document.addEventListener('touchmove', function(event) { event.preventDefault(); }, false); ``` 希望这些方法可以帮助您解决移动端iOS系统onload事件失效问题

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值