IE6,IE7下js动态加载图片不显示错误

先描述一下出现这种匪夷所思bug的背景:
我在页面加载的时候加载一堆小缩略图,a href="javascript:void(0);" onclick="switch_image(’1.jpg’)"img src="/images/defaultpic.gif" //a
这么多小的缩略图标签循环平铺下来,当单击小的图片时,动态加载大的图片显示,就类似于淘宝的商品查看图片 。页面上有一个标签:
div id="pic-box"img src="" id="big-image" //div
为了节省流量,加快页面载入速度,先不加载大图,当用户单击小图时,动态加载一张大图显示 。
复制代码 代码如下:
script
function switch_image(im)
{
document.getElementById(’big-image’).src=https://www.rkxy.com.cn/dnjc/im;
}
/script

这种方式在IE6,7外所有的浏览器工作都正常,比如 IE8,Firefox, Opera, chrome, Safari 。。。
就是IE6,7这两个浏览器加载不了,单击小图的时候,有时候你能加载,有时候加载一半,有时候不能加载 。
我以为问题出在src这个东西上面,有可能IE6,7修改src不能正确加载图片,于是尝试把切换函数修改为:
document.getElementById(’pic-box’).innerHTML=’img src="/images/defaultpic.gif" /’;
IE6,7还是不行,于是想,有可能是图片被缓存了,那么加上随机数:
document.getElementById(’pic-box’).innerHTML=’img src="/images/defaultpic.gif" /’;
IE6,7依然不行 。。
于是在想,可能是img用在innerHTML里面出现的问题,所以,改成用 appendChild
var img = document.createElement(’img’);
img.src= https://www.rkxy.com.cn/dnjc/im;
document.getElementById(’pic-box’).appendChild(img);
还是不行 。
再修改成用 new image来:

var img = new Image();
img.src= https://www.rkxy.com.cn/dnjc/im;
document.getElementById(’pic-box’).appendChild(img);
还是不行 。
百思不得其解,想,难道IE6,7不能动态加载图片吗?难道是img标签的问题?
既然这样就换成背景图加载吧,于是
document.getElementById(’pic-box’).style.background="url("im")";
IE6,7依然不行,上面这么多方法除IE6,7外其他都是正常的 。
只有不停的Google,结果google到了:
IE6,7只有在用a onclick="switch_image()" href="javascript:void(0);"/a这样
动态加载图片是才会出现这种情况,google到的一篇说明:

有几个吃饱了没事儿干的老外反复试验发现这个问题是ie6中一个底层机制的bug,之后的版本已经解决了 。
据说a href="javascript:void(0)"或者a href=https://www.rkxy.com.cn/dnjc/#"这样使用a标签的话并不能阻止a标签最后触发一个什么行为,
导致ie6会错误的认为页面刷新或者重定向了,并且中断了当前所有连接,这样新图片的加载就被aborted了 。
当然这些吃饱了没事儿干的老外们也提出了各种匪夷所思复杂无比的解决方案 。

最简单的方法有两个,一个是这样使用a标签a href="https://www.rkxy.com.cn/dnjc/switch_image(); return false;",另外一个就是用div替换a标签来用 。

实际上我发现不仅是IE6,IE7也同样有这个bug,还有,采用:a href="https://www.rkxy.com.cn/dnjc/switch_image(); return false;"并不能解决问题 。

所以推荐用其他标签替换a标签,最后一怒之下把所有的a标签替换为span,从此就再也没出现这样的问题了 。您可能感兴趣的文章:Jquery.LazyLoad.js修正版下载,实现图片延迟加载插件JS实现图片预加载无需等待关于JS判断图片是否加载完成且获取图片宽度的方法jquery插件lazyload.js延迟加载图片的使用方法js或者jquery判断图片是否加载完成实现代码js 实现图片预加载(js操作 Image对象属性complete,事件onload 异步加载图片)网页图片延时加载的js代码基于jquery的图片懒加载jsjs图片延迟加载的实现方法及思路js实现图片在未加载完成前显示加载中字样Jquery图片延迟加载插件jquery.lazyload.js的使用方法js 加载时自动调整图片大小javascript预加载图片、css、js的方法示例介绍JavaScript仿淘宝页面图片滚动加载及刷新回顶部的方法解析

推荐阅读