var Img=new Image()
Img.onload = function () {
                    //
                }
Img.src = imgSrc;Img.onreadystatechange = function () 
{
//
}
我在IE下想判断上传图片的大小,用了上面的方法,也在网上找了一些资料都没有解决,我遇到的问题的,上面的方法,我在运行的时候部分图片是有效的,部分是无效的。有一些图片根本不执行onload,我用readyState看也一直是未初始化的状态,求各位大神解决。ieimagefunction

解决方案 »

  1.   

    可能是图片已经被浏览器缓存,所以不存在加载问题,也就不会执行onload
    获取文件大小你上传后在服务端获取就行了,直接把文件大小返回到客户端,无需像你那样写
      

  2.   

    谢谢你的回复,应该不是缓存的问题,我清过缓存,而且能传的图片一直能传,重复几次都没问题,不能传的图片就是不能,而这些不能传的图片在chrome和FF用同样的方法都是正常的,而且用IE的滤镜预览也是正常的,我不知道什么原因。还有就是我想在客户端判断好大小,太大就不让上传。
      

  3.   

    把事件绑定放在img.src = url之前还有客户端没办法兼容所有浏览器获取到文件大小。
      

  4.   


    我的确把事件绑定放在img.src = url之前了,网上类似的文章我也看过了,没有解决我的问题,我在三楼也说了,我清了缓存,而且奇怪的就是有的图片可以有的图片不可以
      

  5.   

    html上传客户端是不能判断文件大小的,就算某种浏览器可以,也无法保证兼容性
    只能上传后在服务端判断
    flash或者activex文件上传能在客户端判断
      

  6.   


    恩,判断大小这个姑且放下,我现在最想搞明白的是为什么会出现我遇到的问题,有的图片onload怎么都没问题,而有的图片就是不行,而且这些图片本身都是正常的,没有错误的。
      

  7.   

    var Img=new Image()Img.onreadystatechange = function () 
    {
    //
    Img.src = imgSrc;
    }
      

  8.   


    var Img=new Image()
     
    Img.onreadystatechange = function () {
     
    }
    Img.src = imgSrc;
    这样。。IE下用了readystatechange就别用onload了。
      

  9.   

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">  
    <HTML>  
     <HEAD>  
            <TITLE>兼容IE678的图片上传验证大小及格式并预览</TITLE>  
            <META NAME="Generator" CONTENT="EditPlus">  
            <META NAME="Author" CONTENT="">  
             <META NAME="Keywords" CONTENT="">  
             <META NAME="Description" CONTENT="">  
     </HEAD>  
     
     <BODY>  
     <script language=javascript>
         var ImgObj = new Image();      //建立一个图像对象  
         var AllImgExt = ".jpg|.jpeg|.gif|.bmp|.png|"//全部图片格式类型  
         var FileObj, ImgFileSize, ImgWidth, ImgHeight, FileExt, ErrMsg, FileMsg, HasCheked, IsImg//全局变量 图片相关属性  
         //以下为限制变量  
         var AllowExt = ".jpg|.jpeg|.gif|.bmp|.png|" //允许上传的文件类型 ?为无限制 每个扩展名后边要加一个"|" 小写字母表示  
         //var AllowExt=0  
         var AllowImgFileSize = 500;    //允许上传图片文件的大小 0为无限制 单位:KB   
         var AllowImgWidth = 1200;      //允许上传的图片的宽度 ?为无限制 单位:px(像素)  
         var AllowImgHeight = 1600;      //允许上传的图片的高度 ?为无限制 单位:px(像素)  
         HasChecked = false;
         function CheckProperty(obj)    //检测图像属性  
         {
             FileObj = obj;
             if (ErrMsg != "")      //检测是否为正确的图像文件 返回出错信息并重置  
             {
                 ShowMsg(ErrMsg, false);
                 return false;      //返回  
             }         if (ImgObj.readyState != "complete") //如果图像是未加载完成进行循环检测  
             {
                 setTimeout("CheckProperty(FileObj)", 500);
                 return false;
             }         ImgFileSize = Math.round(ImgObj.fileSize / 1024 * 100) / 100; //取得图片文件的大小  
             ImgWidth = ImgObj.width      //取得图片的宽度  
             ImgHeight = ImgObj.height;    //取得图片的高度  
             FileMsg = "图片大小:" + ImgWidth + "*" + ImgHeight + "px";
             FileMsg = FileMsg + "图片文件大小:" + ImgFileSize + "Kb";
             FileMsg = FileMsg + "图片文件扩展名:" + FileExt;         if (AllowImgWidth != 0 && AllowImgWidth < ImgWidth)
                 ErrMsg = ErrMsg + "图片宽度超过限制。请上传宽度小于" + AllowImgWidth + "px的文件,当前图片宽度为" + ImgWidth + "px";         if (AllowImgHeight != 0 && AllowImgHeight < ImgHeight)
                 ErrMsg = ErrMsg + "图片高度超过限制。请上传高度小于" + AllowImgHeight + "px的文件,当前图片高度为" + ImgHeight + "px";         if (AllowImgFileSize != 0 && AllowImgFileSize < ImgFileSize)
                 ErrMsg = ErrMsg + "图片文件大小超过限制。请上传小于" + AllowImgFileSize + "KB的文件,当前文件大小为" + ImgFileSize + "KB";         if (ErrMsg != "")
                 ShowMsg(ErrMsg, false);
             else
                 ShowMsg(FileMsg, true);
         }     ImgObj.onerror = function () { ErrMsg = '图片格式不正确或者图片已损坏!' }     function ShowMsg(msg, tf) //显示提示信息 tf=true 显示文件信息 tf=false 显示错误信息 msg-信息内容  
         {
             msg = msg.replace("\n", "<li>");
             msg = msg.replace(/\n/gi, "<li>");
             if (!tf) {
                 document.all.UploadButton.disabled = true;
                 FileObj.outerHTML = FileObj.outerHTML;
                 alert(msg);
                 HasChecked = false;
             }
             else {
                 document.all.UploadButton.disabled = false;
                 if (IsImg)
                     PreviewImg.innerHTML = "<img src='" + ImgObj.src + "' width='100' height='150'>"
                 else
                     PreviewImg.innerHTML = "非图片文件";
                 alert(msg);
                 HasChecked = true;
             }
         }     function CheckExt(obj) {
             ErrMsg = "";
             FileMsg = "";
             FileObj = obj;
             IsImg = false;
             HasChecked = false;
             PreviewImg.innerHTML = "照片";
             if (obj.value == "") return false;
             document.all.UploadButton.disabled = true;
             FileExt = obj.value.substr(obj.value.lastIndexOf(".")).toLowerCase();
             if (AllowExt != 0 && AllowExt.indexOf(FileExt + "|") == -1) //判断文件类型是否允许上传  
             {
                 ErrMsg = "该文件类型不允许上传。请上传 " + AllowExt + " 类型的文件,当前文件类型为" + FileExt;
                 ShowMsg(ErrMsg, false);
                 return false;
             }         if (AllImgExt.indexOf(FileExt + "|") != -1)    //如果图片文件,则进行图片信息处理  
             {
                 IsImg = true;
                 ImgObj.src = obj.value;
                 CheckProperty(obj);
                 return false;
             }
             else {
                 FileMsg = "文件扩展名:" + FileExt;
                 ShowMsg(FileMsg, true);
             }     }     function SwitchUpType(tf) {
             if (tf)
                 str = '<input type="file" name="file1" onchange="CheckExt(this)" style="width:180px;">'
             else
                 str = '<input type="text" name="file1" onblur="CheckExt(this)" style="width:180px;">'
             document.all.file1.outerHTML = str;
             document.all.UploadButton.disabled = true;
             MsgList.innerHTML = "";
         }  
     
    </script>  
    <form enctype="multipart/form-data" method="POST" onsubmit="return HasChecked;">  
          <fieldset style="width: 372; height: 60;padding:2px;">  
            <legend><font color="#FF0000">上传照片</font></legend> 
     
            <input type="file" name="file1" onchange="CheckExt(this)" style="width:180px;">  
            <input type="submit" id="UploadButton" value="开始上传" disabled>  
     
            <div style="border:1 solid #808080;background:#E0E0E0;width100%;height:20px;color:#606060;padding:5px;">  
     
            </div> 
    <div id="PreviewImg">照片</div>
     </fieldset>  
    </form> 
    </body>
    </html>这是我网上找来的代码说是兼容IE的,我后来做过修改,img.src的位置也都挪过,一样的问题有的图片可以,有的不可以
      

  10.   

    var Img=new Image()if(Img.readyState){
        if(Img.readyState=='complete' || Img.readyState=='loaded'){
            alert('图片已加载完毕')
        }
    }
    Img.onload = function () {
        alert('图片加载完毕')
    }Img.src = imgSrc;这样试试,看看你说的不起作用的图片有什么反应
      

  11.   

    额。。,貌似反了、、
    var Img=new Image()
     
    Img.onload = function () {
        alert('图片加载完毕')
    }
     
    Img.src = imgSrc;
    if(Img.readyState){
        if(Img.readyState=='complete' || Img.readyState=='loaded'){
            alert('图片已加载完毕')
        }
    }
    这样试试。。
      

  12.   

    我用IE8调试通过正常的图片和不正常的图片对比发现了一些差别
    src被复制后,img属性有以下的差别:
    正常图片 fileCreatedDate  fileModifiedDate值被刷新,而出错图片仍然是未指明的错误(初始化时都一样)
    正常的href赋值为图片的绝对路径,出错的为空;
    mimeType正常的被刷新为空 ,出错的显示未指明的错误(初始化时都一样)
    protocol正常的被赋值,出错的为空