IE6,IE7下js動(dòng)態(tài)加載圖片不顯示錯(cuò)誤
更新時(shí)間:2010年07月17日 18:52:58 作者:
ie6,7下js動(dòng)態(tài)加載圖片不顯示錯(cuò)誤,碰到這類問題的朋友可以參考下。
先描述一下出現(xiàn)這種匪夷所思bug的背景:
我在頁面加載的時(shí)候加載一堆小縮略圖,<a href="javascript:void(0);" onclick="switch_image('1.jpg')"><img src="1.thumb.jpg" /></a>
這么多小的縮略圖標(biāo)簽循環(huán)平鋪下來,當(dāng)單擊小的圖片時(shí),動(dòng)態(tài)加載大的圖片顯示,就類似于淘寶的商品查看圖片。頁面上有一個(gè)標(biāo)簽:
<div id="pic-box"><img src="" id="big-image" /></div>
為了節(jié)省流量,加快頁面載入速度,先不加載大圖,當(dāng)用戶單擊小圖時(shí),動(dòng)態(tài)加載一張大圖顯示。
<script>
function switch_image(im)
{
document.getElementById('big-image').src=im;
}
</script>
這種方式在IE6,7外所有的瀏覽器工作都正常,比如 IE8,Firefox, Opera, chrome, Safari。。。
就是IE6,7這兩個(gè)瀏覽器加載不了,單擊小圖的時(shí)候,有時(shí)候你能加載,有時(shí)候加載一半,有時(shí)候不能加載。
我以為問題出在src這個(gè)東西上面,有可能IE6,7修改src不能正確加載圖片,于是嘗試把切換函數(shù)修改為:
document.getElementById('pic-box').innerHTML='<img src="' + im + '" />';
IE6,7還是不行,于是想,有可能是圖片被緩存了,那么加上隨機(jī)數(shù):
document.getElementById('pic-box').innerHTML='<img src="' + im + '?r=' + Math.random() + '" />';
IE6,7依然不行。。
于是在想,可能是img用在innerHTML里面出現(xiàn)的問題,所以,改成用 appendChild
var img = document.createElement('img');
img.src= im;
document.getElementById('pic-box').appendChild(img);
還是不行。
再修改成用 new image來:
var img = new Image();
img.src= im;
document.getElementById('pic-box').appendChild(img);
還是不行。
百思不得其解,想,難道IE6,7不能動(dòng)態(tài)加載圖片嗎?難道是img標(biāo)簽的問題?
既然這樣就換成背景圖加載吧,于是
document.getElementById('pic-box').style.background="url(" + im + ")";
IE6,7依然不行,上面這么多方法除IE6,7外其他都是正常的。
只有不停的Google,結(jié)果google到了:
IE6,7只有在用<a onclick="switch_image()" href="javascript:void(0);"></a>這樣
動(dòng)態(tài)加載圖片是才會(huì)出現(xiàn)這種情況,google到的一篇說明:
有幾個(gè)吃飽了沒事兒干的老外反復(fù)試驗(yàn)發(fā)現(xiàn)這個(gè)問題是ie6中一個(gè)底層機(jī)制的bug,之后的版本已經(jīng)解決了。
據(jù)說<a href="javascript:void(0)">或者<a href=#">這樣使用a標(biāo)簽的話并不能阻止a標(biāo)簽最后觸發(fā)一個(gè)什么行為,
導(dǎo)致ie6會(huì)錯(cuò)誤的認(rèn)為頁面刷新或者重定向了,并且中斷了當(dāng)前所有連接,這樣新圖片的加載就被aborted了。
當(dāng)然這些吃飽了沒事兒干的老外們也提出了各種匪夷所思復(fù)雜無比的解決方案。
最簡單的方法有兩個(gè),一個(gè)是這樣使用a標(biāo)簽<a href="switch_image(); return false;">,另外一個(gè)就是用div替換a標(biāo)簽來用。
實(shí)際上我發(fā)現(xiàn)不僅是IE6,IE7也同樣有這個(gè)bug,還有,采用:<a href="switch_image(); return false;">并不能解決問題。
所以推薦用其他標(biāo)簽替換a標(biāo)簽,最后一怒之下把所有的a標(biāo)簽替換為span,從此就再也沒出現(xiàn)這樣的問題了。
我在頁面加載的時(shí)候加載一堆小縮略圖,<a href="javascript:void(0);" onclick="switch_image('1.jpg')"><img src="1.thumb.jpg" /></a>
這么多小的縮略圖標(biāo)簽循環(huán)平鋪下來,當(dāng)單擊小的圖片時(shí),動(dòng)態(tài)加載大的圖片顯示,就類似于淘寶的商品查看圖片。頁面上有一個(gè)標(biāo)簽:
<div id="pic-box"><img src="" id="big-image" /></div>
為了節(jié)省流量,加快頁面載入速度,先不加載大圖,當(dāng)用戶單擊小圖時(shí),動(dòng)態(tài)加載一張大圖顯示。
復(fù)制代碼 代碼如下:
<script>
function switch_image(im)
{
document.getElementById('big-image').src=im;
}
</script>
這種方式在IE6,7外所有的瀏覽器工作都正常,比如 IE8,Firefox, Opera, chrome, Safari。。。
就是IE6,7這兩個(gè)瀏覽器加載不了,單擊小圖的時(shí)候,有時(shí)候你能加載,有時(shí)候加載一半,有時(shí)候不能加載。
我以為問題出在src這個(gè)東西上面,有可能IE6,7修改src不能正確加載圖片,于是嘗試把切換函數(shù)修改為:
document.getElementById('pic-box').innerHTML='<img src="' + im + '" />';
IE6,7還是不行,于是想,有可能是圖片被緩存了,那么加上隨機(jī)數(shù):
document.getElementById('pic-box').innerHTML='<img src="' + im + '?r=' + Math.random() + '" />';
IE6,7依然不行。。
于是在想,可能是img用在innerHTML里面出現(xiàn)的問題,所以,改成用 appendChild
var img = document.createElement('img');
img.src= im;
document.getElementById('pic-box').appendChild(img);
還是不行。
再修改成用 new image來:
var img = new Image();
img.src= im;
document.getElementById('pic-box').appendChild(img);
還是不行。
百思不得其解,想,難道IE6,7不能動(dòng)態(tài)加載圖片嗎?難道是img標(biāo)簽的問題?
既然這樣就換成背景圖加載吧,于是
document.getElementById('pic-box').style.background="url(" + im + ")";
IE6,7依然不行,上面這么多方法除IE6,7外其他都是正常的。
只有不停的Google,結(jié)果google到了:
IE6,7只有在用<a onclick="switch_image()" href="javascript:void(0);"></a>這樣
動(dòng)態(tài)加載圖片是才會(huì)出現(xiàn)這種情況,google到的一篇說明:
有幾個(gè)吃飽了沒事兒干的老外反復(fù)試驗(yàn)發(fā)現(xiàn)這個(gè)問題是ie6中一個(gè)底層機(jī)制的bug,之后的版本已經(jīng)解決了。
據(jù)說<a href="javascript:void(0)">或者<a href=#">這樣使用a標(biāo)簽的話并不能阻止a標(biāo)簽最后觸發(fā)一個(gè)什么行為,
導(dǎo)致ie6會(huì)錯(cuò)誤的認(rèn)為頁面刷新或者重定向了,并且中斷了當(dāng)前所有連接,這樣新圖片的加載就被aborted了。
當(dāng)然這些吃飽了沒事兒干的老外們也提出了各種匪夷所思復(fù)雜無比的解決方案。
最簡單的方法有兩個(gè),一個(gè)是這樣使用a標(biāo)簽<a href="switch_image(); return false;">,另外一個(gè)就是用div替換a標(biāo)簽來用。
實(shí)際上我發(fā)現(xiàn)不僅是IE6,IE7也同樣有這個(gè)bug,還有,采用:<a href="switch_image(); return false;">并不能解決問題。
所以推薦用其他標(biāo)簽替換a標(biāo)簽,最后一怒之下把所有的a標(biāo)簽替換為span,從此就再也沒出現(xiàn)這樣的問題了。
您可能感興趣的文章:
- Jquery.LazyLoad.js修正版下載,實(shí)現(xiàn)圖片延遲加載插件
- JS實(shí)現(xiàn)圖片預(yù)加載無需等待
- 關(guān)于JS判斷圖片是否加載完成且獲取圖片寬度的方法
- jquery插件lazyload.js延遲加載圖片的使用方法
- js或者jquery判斷圖片是否加載完成實(shí)現(xiàn)代碼
- js 實(shí)現(xiàn)圖片預(yù)加載(js操作 Image對(duì)象屬性complete ,事件onload 異步加載圖片)
- 網(wǎng)頁圖片延時(shí)加載的js代碼
- 基于jquery的圖片懶加載js
- js圖片延遲加載的實(shí)現(xiàn)方法及思路
- js實(shí)現(xiàn)圖片在未加載完成前顯示加載中字樣
- Jquery圖片延遲加載插件jquery.lazyload.js的使用方法
- js 加載時(shí)自動(dòng)調(diào)整圖片大小
- javascript預(yù)加載圖片、css、js的方法示例介紹
- JavaScript仿淘寶頁面圖片滾動(dòng)加載及刷新回頂部的方法解析
相關(guān)文章
js導(dǎo)出table數(shù)據(jù)到excel即導(dǎo)出為EXCEL文檔的方法
導(dǎo)出table為EXCEL文檔的方法有很多,在本文為大家介紹下js中時(shí)如何做到的,感興趣的朋友可以參考下2013-10-10uniapp微信小程序打卡功能的詳細(xì)實(shí)現(xiàn)流程
最近因?yàn)楣ぷ餍枰?搭建了一個(gè)加班打卡的小程序,下面這篇文章主要給大家介紹了關(guān)于uniapp微信小程序打卡功能的詳細(xì)實(shí)現(xiàn)流程,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-12-12Typescript 函數(shù)重載的實(shí)現(xiàn)
本文主要介紹了Typescript 函數(shù)重載的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04ES6 Object屬性新的寫法實(shí)例小結(jié)
這篇文章主要介紹了ES6 Object屬性新的寫法,結(jié)合實(shí)例形式總結(jié)分析了ES6中object屬性的常見簡化寫法,需要的朋友可以參考下2019-06-06JavaScript?賦值,淺復(fù)制和深復(fù)制的區(qū)別
這篇文章主要介紹了JavaScript?賦值,淺復(fù)制和深復(fù)制的區(qū)別,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-05-05js設(shè)置document.domain實(shí)現(xiàn)跨域的注意點(diǎn)分析
這篇文章主要介紹了js設(shè)置document.domain實(shí)現(xiàn)跨域的注意點(diǎn),較為詳細(xì)的分析了document.domain跨域的相關(guān)技巧,需要的朋友可以參考下2015-05-05javascript使用正則控制input輸入框允許輸入的值方法大全
在做項(xiàng)目的時(shí)候,我們經(jīng)常會(huì)遇到控制input輸入框允許輸入的值為數(shù)字,字母,漢字或者混排的情況,那么我們怎么來處理呢,下面我們就來探討怎么通過用javascript正則來實(shí)現(xiàn)2014-06-06