图 片 显 示 o n e r r or 的问题啊! 你应该再onerror里面 alert(bRun);----------------websharp, 最简单最快的web项目开发技术,欢迎访问 http://blog.csdn.net/coolmasoft 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 onerror 里面不调用x1()在onerror里设置一些flag在alert(bRun);下面判断flag来决定是否执行x1 但是发现js好像是多thread的感觉!第一次的时候,不是先执行x1,而是先执行出alert(bRun);后才执行x1。 第二次好像就好了!你第一次执行由于onerror这个执行需要加载完才执行。第二次是缓存,所以就会先按顺序执行最好的方法就是你这部分最好这样写if(通过后缀判断图片是否是允许的类型){ view = "<img src='"+src+"'onerror='x1()'>";} else} view = x2(); alert(bRun);} if(bRun)} view = x3()}规范点 if(通过后缀判断图片是否是允许的类型){ view = "<img src='"+src+"'onerror='x1()'>";}else{ view = x2(); alert(bRun);}if(bRun){ view = x3()} 不是js多线程,是ie浏览器多线程,异步下载你的图片 就是这个意思,第一次执行由于onerror这个执行需要加载完才执行。第二次是缓存,所以就会先按顺序执行 这样跟调用onerror在onerror的方法里面设置没区别吧?应该是他们说的这个原因不是js多线程,是ie浏览器多线程,异步下载你的图片 所以导致啊!我现在就希望能先执行onerror的啊 只能在onerror【加载出错】事件中并且另一个分支事件onload【成功加载完成】中处理同步问题 不知道这样说你明白了吗function x3(){ return ........;}function x2(){ return ........;}var bRun = false;function x1 (){ bRun = true;//==============x0中的部分代码放这里来进行同步处理===========alert(bRun); if(bRun) view = x3() . . . . .}function x0(){ . . . . . var view = ""; if(通过后缀判断图片是否是允许的类型) view = "<img src='"+src+"'onerror='x1()' onload='你的onload事件'>";//============== else view = x2();//如果你是需要更具bRun来确定下面的代码的执行,需要把这些代码提取出来放进x1中或者放入一个独立的函数中,然后在x1中运行//如果你是需要在成功加载时执行下面的代码中的一部分,需要把这一部分提取出来,放入onload事件中,上面的img需要onload事件 /*alert(bRun); if(bRun) view = x3() . . . . .*/} <html> <head> <style type="text/css"> .imgShow { display:block; boder:3px solid #c0c0c0; } .txt { width:400px; } </style> <script type="text/javascript"> function $(id) { return typeof(id)=="string"?document.getElementById(id):id; }; function showImage() { var imageType=$("txtImgUrl").value.substring($("txtImgUrl").value.length-3).toLowerCase(); if(imageType=="jpg" || imageType=="tif") { $("imgShow").src=$("txtImgUrl").value; } else { showErrorMessage("bad file type!"); } }; function imageLoadError() { alert("image load error"); }; function showErrorMessage(message) { alert(message); }; </script> </head> <body> <img class="imgShow" onerror="imageLoadError();" id="imgShow" /> <input class="txt" type="text" id="txtImgUrl" /> <input type="button" value="showImage" onclick="showImage();" /> </body></html> 非常感谢但是这样不行啊!因为 function showImage() {..........这里也有一大堆代码 var imageType=$("txtImgUrl").value.substring($("txtImgUrl").value.length-3).toLowerCase(); if(imageType=="jpg" || imageType=="tif") { $("imgShow").src=$("txtImgUrl").value; } else { showErrorMessage("bad file type!"); }..........这里还有一大堆代码 }; 能否在alert(bRun);这里,直接获得onerror事件是否被触发啊?? 没有看到我说明的吗?第一次执行由于onerror这个执行需要加载完才执行。 你不用onload来触发别的肯定是不行的 那改成这样看是不是你要的效果,觉得你的程序架构有问题,换种架构方式可能要好一点。<html> <head> <style type="text/css"> .imgShow { display:block; border:3px solid #c0c0c0; } .txt { width:400px; } </style> <script type="text/javascript"> function $(id) { return typeof(id)=="string"?document.getElementById(id):id; }; var bRun=false; var intervalId=0; function showImage() { var imageType=$("txtImgUrl").value.substring($("txtImgUrl").value.length-3).toLowerCase(); if(imageType=="jpg" || imageType=="tif") { $("imgShow").src=$("txtImgUrl").value; } else { showErrorMessage("bad file type!"); } intervalId=window.setInterval(detectOnError,100); function detectOnError() { if(bRun) { window.clearInterval(intervalId); alert('onError'); } }; }; function imageLoadError() { bRun=true; }; function showErrorMessage(message) { alert(message); }; </script> </head> <body> <img class="imgShow" onerror="imageLoadError();" id="imgShow" /> <input class="txt" type="text" id="txtImgUrl" /> <input type="button" value="showImage" onclick="showImage();" /> </body></html> 那你觉得 YH_Random <html> <head> <style type="text/css"> .imgShow { display:block; border:3px solid #c0c0c0; } .txt { width:400px; } </style> <script type="text/javascript"> function $(id) { return typeof(id)=="string"?document.getElementById(id):id; }; var bRun=false; var intervalId=0; function showImage() { var imageType=$("txtImgUrl").value.substring($("txtImgUrl").value.length-3).toLowerCase(); if(imageType=="jpg" || imageType=="tif") { $("imgShow").src=$("txtImgUrl").value; } else { showErrorMessage("bad file type!"); } intervalId=window.setInterval(detectOnError,100); function detectOnError() { if(bRun) { window.clearInterval(intervalId); alert('onError'); } }; }; function imageLoadError() { bRun=true; }; function showErrorMessage(message) { alert(message); }; </script> </head> <body> <img class="imgShow" onerror="imageLoadError();" id="imgShow" /> <input class="txt" type="text" id="txtImgUrl" /> <input type="button" value="showImage" onclick="showImage();" /> </body></html>方法行吗? 不知道你的需求是怎样的按你这个的写法'onerror='x1()'>";只有错误的时候才会执行onerror,不然就不执行 intervalId=window.setInterval(detectOnError,100);他加上这个detectOnError,也是可以的,变相执行了不过没有必要,直接可以在function imageLoadError() { bRun=true; };这里执行detectOnError() 至于你原来的代码其实上也是一样的道理可以执行在function x1 (){ bRun = true;}这里调用function x3(){ return ........;}即可,不需要设置bRun = true;因为你的 x1 是只有在错误的时候才回触发只是不知道你原来那为什么view = "<img src='"+src+"'onerror='x1()'>";这样有点不明白 这个的功能是!显示jpg、tif图片, 先判断图片,是否为允许显示的类型,如果不是,就去x2方法,返回显示错误字符串! 如果图片有错,就去x1方法,将全局变量bRun设置为true,然后通过判断bRun是否为true来决定是否调用x3方法! 但是发现js好像是多thread的感觉!第一次的时候,不是先执行x1,而是先执行出alert(bRun);后才执行x1。 第二次好像就好了! 本来也不是采用这样的结构。本来也是在x1方法里面就innerHTML错误字符串的!可是由于省略号的地方还有很多代码需要执行,而执行了x1方法以后,程序还有继续向下执行,所以才采用现在的结构!可是却还是不行! 我不知道有没有办法能直接在 alert(bRun);这句的下面直接得到是否onerror事件是否被执行过了啊? 不知道我说明白了没有!55 这个的功能是!显示jpg、tif图片, 先判断图片,是否为允许显示的类型,如果不是,就去x2方法,返回显示错误字符串! 如果图片有错,就去x1方法,将全局变量bRun设置为true,然后通过判断bRun是否为true来决定是否调用x3方法! 但是发现js好像是多thread的感觉!第一次的时候,不是先执行x1,而是先执行出alert(bRun);后才执行x1。 第二次好像就好了! 本来也不是采用这样的结构。本来也是在x1方法里面就innerHTML错误字符串的!可是由于省略号的地方还有很多代码需要执行,而执行了x1方法以后,程序还有继续向下执行,所以才采用现在的结构!可是却还是不行! 我不知道有没有办法能直接在 alert(bRun);这句的下面直接得到是否onerror事件是否被执行过了啊? 不知道我说明白了没有!55 你又饶回去了说了不是多thread了原因也分析给你了 this 参数的问题 jquery操作table的tr td,并且获得td中的值? js 函数去掉地址栏 如何弹出一个div使其浮动于其他div之上? js正则表达式问题!!!! 请教javascript的中文化问题 **********为什么计算出来的直是NaN啊******************** 大家帮助看一下。这个邮箱为什么进不去。(高手来看一下。(急急)在线等 再来菜鸟问题 javascript里判断二个日期先后(大小)的函数是那个? 急!有谁帮我看一下这个页面的JS为什么在IE6下不行 大家来研究一下这段JS播放器的代码?改改它
在onerror里设置一些flag
在alert(bRun);下面判断flag来决定是否执行x1
第二次好像就好了!你第一次执行由于onerror这个执行需要加载完才执行。第二次是缓存,所以就会先按顺序执行最好的方法就是
你这部分最好这样写
if(通过后缀判断图片是否是允许的类型){
view = "<img src='"+src+"'onerror='x1()'>";}
else}
view = x2();
alert(bRun);}
if(bRun)}
view = x3()}
规范点
view = "<img src='"+src+"'onerror='x1()'>";
}
else{
view = x2();
alert(bRun);
}
if(bRun){
view = x3()
}
就是这个意思,
第一次执行由于onerror这个执行需要加载完才执行。
第二次是缓存,所以就会先按顺序执行
不是js多线程,是ie浏览器多线程,异步下载你的图片 所以导致啊!我现在就希望能先执行onerror的啊
function x3(){
return ........;
}function x2(){
return ........;
}var bRun = false;
function x1 (){
bRun = true;
//==============x0中的部分代码放这里来进行同步处理===========
alert(bRun);
if(bRun)
view = x3()
.
.
.
.
.}function x0(){
.
.
.
.
.
var view = "";
if(通过后缀判断图片是否是允许的类型)
view = "<img src='"+src+"'onerror='x1()' onload='你的onload事件'>";//==============
else
view = x2();
//如果你是需要更具bRun来确定下面的代码的执行,需要把这些代码提取出来放进x1中或者放入一个独立的函数中,然后在x1中运行
//如果你是需要在成功加载时执行下面的代码中的一部分,需要把这一部分提取出来,放入onload事件中,上面的img需要onload事件
/*alert(bRun);
if(bRun)
view = x3()
.
.
.
.
.*/
}
<html>
<head>
<style type="text/css">
.imgShow
{
display:block;
boder:3px solid #c0c0c0;
}
.txt
{
width:400px;
}
</style>
<script type="text/javascript">
function $(id)
{
return typeof(id)=="string"?document.getElementById(id):id;
};
function showImage()
{
var imageType=$("txtImgUrl").value.substring($("txtImgUrl").value.length-3).toLowerCase();
if(imageType=="jpg" || imageType=="tif")
{
$("imgShow").src=$("txtImgUrl").value;
}
else
{
showErrorMessage("bad file type!");
}
};
function imageLoadError()
{
alert("image load error");
};
function showErrorMessage(message)
{
alert(message);
};
</script>
</head>
<body>
<img class="imgShow" onerror="imageLoadError();" id="imgShow" />
<input class="txt" type="text" id="txtImgUrl" />
<input type="button" value="showImage" onclick="showImage();" />
</body>
</html>
{
..........这里也有一大堆代码
var imageType=$("txtImgUrl").value.substring($("txtImgUrl").value.length-3).toLowerCase();
if(imageType=="jpg" || imageType=="tif")
{
$("imgShow").src=$("txtImgUrl").value;
}
else
{
showErrorMessage("bad file type!");
}..........这里还有一大堆代码 };
能否在alert(bRun);
这里,直接获得onerror事件是否被触发啊??
没有看到我说明的吗?第一次执行由于onerror这个执行需要加载完才执行。
你不用onload来触发别的肯定是不行的
<html>
<head>
<style type="text/css">
.imgShow
{
display:block;
border:3px solid #c0c0c0;
}
.txt
{
width:400px;
}
</style>
<script type="text/javascript">
function $(id)
{
return typeof(id)=="string"?document.getElementById(id):id;
};
var bRun=false;
var intervalId=0;
function showImage()
{
var imageType=$("txtImgUrl").value.substring($("txtImgUrl").value.length-3).toLowerCase();
if(imageType=="jpg" || imageType=="tif")
{
$("imgShow").src=$("txtImgUrl").value;
}
else
{
showErrorMessage("bad file type!");
}
intervalId=window.setInterval(detectOnError,100);
function detectOnError()
{
if(bRun)
{
window.clearInterval(intervalId);
alert('onError');
}
};
};
function imageLoadError()
{
bRun=true;
};
function showErrorMessage(message)
{
alert(message);
};
</script>
</head>
<body>
<img class="imgShow" onerror="imageLoadError();" id="imgShow" />
<input class="txt" type="text" id="txtImgUrl" />
<input type="button" value="showImage" onclick="showImage();" />
</body>
</html>
<head>
<style type="text/css">
.imgShow
{
display:block;
border:3px solid #c0c0c0;
}
.txt
{
width:400px;
}
</style>
<script type="text/javascript">
function $(id)
{
return typeof(id)=="string"?document.getElementById(id):id;
};
var bRun=false;
var intervalId=0;
function showImage()
{
var imageType=$("txtImgUrl").value.substring($("txtImgUrl").value.length-3).toLowerCase();
if(imageType=="jpg" || imageType=="tif")
{
$("imgShow").src=$("txtImgUrl").value;
}
else
{
showErrorMessage("bad file type!");
}
intervalId=window.setInterval(detectOnError,100);
function detectOnError()
{
if(bRun)
{
window.clearInterval(intervalId);
alert('onError');
}
};
};
function imageLoadError()
{
bRun=true;
};
function showErrorMessage(message)
{
alert(message);
};
</script>
</head>
<body>
<img class="imgShow" onerror="imageLoadError();" id="imgShow" />
<input class="txt" type="text" id="txtImgUrl" />
<input type="button" value="showImage" onclick="showImage();" />
</body>
</html>
方法行吗?
按你这个的写法'onerror='x1()'>";只有错误的时候才会执行onerror,不然就不执行
他加上这个detectOnError,也是可以的,变相执行了不过没有必要,
直接可以在
function imageLoadError()
{
bRun=true;
};
这里执行detectOnError()
function x1 (){
bRun = true;
}
这里调用function x3(){
return ........;
}即可,不需要设置bRun = true;
因为你的 x1 是只有在错误的时候才回触发
只是不知道你原来那为什么view = "<img src='"+src+"'onerror='x1()'>";
这样
有点不明白
先判断图片,是否为允许显示的类型,如果不是,就去x2方法,返回显示错误字符串!
如果图片有错,就去x1方法,将全局变量bRun设置为true,然后通过判断bRun是否为true来决定是否调用x3方法! 但是发现js好像是多thread的感觉!第一次的时候,不是先执行x1,而是先执行出alert(bRun);后才执行x1。
第二次好像就好了! 本来也不是采用这样的结构。本来也是在x1方法里面就innerHTML错误字符串的!可是由于省略号的地方还有很多代码需要执行,而执行了x1方法以后,程序还有继续向下执行,所以才采用现在的结构!可是却还是不行! 我不知道有没有办法能直接在 alert(bRun);这句的下面直接得到是否onerror事件是否被执行过了啊? 不知道我说明白了没有!55
这个的功能是!显示jpg、tif图片,
先判断图片,是否为允许显示的类型,如果不是,就去x2方法,返回显示错误字符串!
如果图片有错,就去x1方法,将全局变量bRun设置为true,然后通过判断bRun是否为true来决定是否调用x3方法! 但是发现js好像是多thread的感觉!第一次的时候,不是先执行x1,而是先执行出alert(bRun);后才执行x1。
第二次好像就好了! 本来也不是采用这样的结构。本来也是在x1方法里面就innerHTML错误字符串的!可是由于省略号的地方还有很多代码需要执行,而执行了x1方法以后,程序还有继续向下执行,所以才采用现在的结构!可是却还是不行! 我不知道有没有办法能直接在 alert(bRun);这句的下面直接得到是否onerror事件是否被执行过了啊? 不知道我说明白了没有!55