作者b12031106 (B先生)
看板Ajax
标题Re: [问题]Javascript 没有每次都执行
时间Thu Aug 9 18:14:54 2012
※ 引述《piglon (TEST123)》之铭言:
: 想请教
: 我写了一个检查破图的js
: 但是不是每次都会把所有的破图取代
: 有时候全部都没有取代
: 但是重新整理几次之後就又好了
: 流程是这样
: 抓到某个div区块内所有的图片
: 检查如果是破图就取代成另一张图
: 程式码如下
: <script type="text/javascript">
: var imgs = document.getElementById("show").getElementsByTagName("img");
: for(var i = 0;i < imgs.length;i++){
: imgs[i].onerror = function(){
: this.src = "./images/broken_pic.jpg";
: }
: }
: </script>
: 我放在</body>之前
: 刚刚听了musie的意见我改了一下但是不会取代@@
: <script type="text/javascript">
: var imgs = document.getElementById("show").getElementsByTagName("img");
: for(var i = 0;i < imgs.length;i++){
: if(imgs[i].complete){
: imgs[i].onerror = function(){this.src = "./images/pez_broken_pic.jpg";}
: }
: }
: </script>
: 我尝试了imgs[i].onload = function(){this.src = "./images/pez_broken_pic.jpg";}
: 还是有部分不会被取代
: imgs[i].complete = function(){this.src = "./images/pez_broken_pic.jpg";}
: 则是全部没有取代
一张图片在载入的时候,成功会触发onload,失败会触发onerror,
但无论是成功或失败,complete都会是true,
complete只代表这张图片尝试过载入了没,
而且在你的code开始跑之前,前面的img说不定都load完了,
也就表示某些img已经触发过onerror事件,举例来说,
你希望小明"火车到台北站的时候下车",
但是你是在火车都已经过台中了才告诉他,
小明当然不会下车。
<script>
window.onload = function(){
var imgs = document.getElementsByTagName('img');
for (var i = 0; i < imgs.length; i++) {
if (imgs[i].naturalWidth == 0 &&
typeof(imgs[i].naturalWidth) != 'undefined') {
imgs[i].src = "./images/pez_broken_pic.jpg";
}
//for IE
if (imgs[i].readyState == 'uninitialized') {
imgs[i].src = "./images/pez_broken_pic.jpg";
}
}
};
</script>
目前只测试过chrome跟IE9,应该还有别的方法,像是用jQuery,
网路上应该都找的到,因为这个也是我google来的。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.32.33.39
※ 编辑: b12031106 来自: 114.32.33.39 (08/09 18:15)
※ 编辑: b12031106 来自: 114.32.33.39 (08/09 18:16)
※ 编辑: b12031106 来自: 114.32.33.39 (08/09 18:16)
1F:推 piglon:哇!!感谢 已经成功了 但是因为档案很大所以 我改成html 08/11 23:11
2F:→ piglon:因为图档load很久 还是会有不执行的状况 08/11 23:12