在做图片上传大小判断的时候遇到一个奇怪的问题,简要代码如下:
<input type="file" id="filename" name="filename">
<img id="testSize" src="" style="display: none"><script type="text/javascript">
var tag = true;
var picChecker = document.getElementById("testSize");
//上传
function a(){
    b();
    alert(tag);
    if(tag){.....}
}
//判断图片的大小不能超过500K
function b(){
picChecker.src = document.getElementById("filename").value;//读图片
picChecker.onreadystatechange=function(){
if(picChecker.readyState=="complete"){
if(picChecker.fileSize>500*1024){
window.tag = false;
MsgBox.showInfoMsg("上传图片大小不能超多500K","提示信息");
return;
}
}
}
}
</script>
问题描述:我在a方法中调用b方法,之后又alert(tag),我想要的结果是如果图片上传大于500K应该是输出false,但是实际上还是true,然后
我在a方法里使用setTimeout方法,设置等待时间,如下:
function a(){
    b();
    setTimeout("test()",1000);
}
function test(){
   alert(tag);
}
这个时候 就可以输出false。
我个人得出结论是:在a方法里调用b方法后,b方法没有执行完就在执行了a方法里的alert所以导致没有对tag赋值成功。
但是设置等待时间不是这个问题的解决办法,所以现在不知道如何才能让b方法完全执行完,才做后续的操作。

解决方案 »

  1.   

    function a(){  if(b()){.....}
    }function b(){
    picChecker.src = document.getElementById("filename").value;//读图片
    picChecker.onreadystatechange=function(){
    if(picChecker.readyState=="complete"){
    if(picChecker.fileSize>500*1024){
    window.tag = false;
    MsgBox.showInfoMsg("上传图片大小不能超多500K","提示信息");
    return window.tag;
    }
    }
    }
    }
      

  2.   

    图片加载与js的执行是异步的,所以才会出现你所说的那种情况,你可以在 img 标签上加一个事件 onLoad ="XXXXX" 这样就行了。
      

  3.   


    貌似不行啊,每次都不能进这个if(b()){},alert(b())每次都是undefined。