你应该再onerror里面 alert(bRun);
----------------
websharp, 最简单最快的web项目开发技术,欢迎访问 http://blog.csdn.net/coolmasoft

解决方案 »

  1.   

    onerror 里面不调用x1()
    在onerror里设置一些flag
    在alert(bRun);下面判断flag来决定是否执行x1
      

  2.   

    但是发现js好像是多thread的感觉!第一次的时候,不是先执行x1,而是先执行出alert(bRun);后才执行x1。 
    第二次好像就好了!你第一次执行由于onerror这个执行需要加载完才执行。第二次是缓存,所以就会先按顺序执行最好的方法就是
    你这部分最好这样写
    if(通过后缀判断图片是否是允许的类型){    
            view = "<img src='"+src+"'onerror='x1()'>";}
          else}
            view = x2();
          alert(bRun);}
          if(bRun)}
            view = x3()}
    规范点
      

  3.   

    if(通过后缀判断图片是否是允许的类型){    
            view = "<img src='"+src+"'onerror='x1()'>";
    }
    else{
            view = x2();
          alert(bRun);
    }
    if(bRun){
            view = x3()
    }
      

  4.   

    不是js多线程,是ie浏览器多线程,异步下载你的图片
      

  5.   


    就是这个意思,
    第一次执行由于onerror这个执行需要加载完才执行。
    第二次是缓存,所以就会先按顺序执行 
      

  6.   

    这样跟调用onerror在onerror的方法里面设置没区别吧?应该是他们说的这个原因
    不是js多线程,是ie浏览器多线程,异步下载你的图片 所以导致啊!我现在就希望能先执行onerror的啊
      

  7.   

    只能在onerror【加载出错】事件中并且另一个分支事件onload【成功加载完成】中处理同步问题
      

  8.   

    不知道这样说你明白了吗
    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()
          .
          .
          .
          .
          .*/
    }    
      

  9.   


    <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>
      

  10.   

    非常感谢但是这样不行啊!因为 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!");
                    }..........这里还有一大堆代码            };
      

  11.   


    能否在alert(bRun);
    这里,直接获得onerror事件是否被触发啊??
      

  12.   


    没有看到我说明的吗?第一次执行由于onerror这个执行需要加载完才执行。 
    你不用onload来触发别的肯定是不行的 
      

  13.   

    那改成这样看是不是你要的效果,觉得你的程序架构有问题,换种架构方式可能要好一点。
    <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>
      

  14.   

    那你觉得  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>
    方法行吗?
      

  15.   

    不知道你的需求是怎样的
    按你这个的写法'onerror='x1()'>";只有错误的时候才会执行onerror,不然就不执行
      

  16.   

    intervalId=window.setInterval(detectOnError,100);
    他加上这个detectOnError,也是可以的,变相执行了不过没有必要,
    直接可以在
    function imageLoadError()
                {
                    bRun=true;
                };
    这里执行detectOnError()
      

  17.   

    至于你原来的代码其实上也是一样的道理可以执行在
    function x1 (){
         bRun = true;
    }
    这里调用function x3(){
        return ........;
    }即可,不需要设置bRun = true;
    因为你的 x1 是只有在错误的时候才回触发
    只是不知道你原来那为什么view = "<img src='"+src+"'onerror='x1()'>";
    这样
    有点不明白
      

  18.   

    这个的功能是!显示jpg、tif图片, 
    先判断图片,是否为允许显示的类型,如果不是,就去x2方法,返回显示错误字符串! 
    如果图片有错,就去x1方法,将全局变量bRun设置为true,然后通过判断bRun是否为true来决定是否调用x3方法! 但是发现js好像是多thread的感觉!第一次的时候,不是先执行x1,而是先执行出alert(bRun);后才执行x1。 
    第二次好像就好了! 本来也不是采用这样的结构。本来也是在x1方法里面就innerHTML错误字符串的!可是由于省略号的地方还有很多代码需要执行,而执行了x1方法以后,程序还有继续向下执行,所以才采用现在的结构!可是却还是不行! 我不知道有没有办法能直接在 alert(bRun);这句的下面直接得到是否onerror事件是否被执行过了啊? 不知道我说明白了没有!55
      

  19.   


    这个的功能是!显示jpg、tif图片, 
    先判断图片,是否为允许显示的类型,如果不是,就去x2方法,返回显示错误字符串! 
    如果图片有错,就去x1方法,将全局变量bRun设置为true,然后通过判断bRun是否为true来决定是否调用x3方法! 但是发现js好像是多thread的感觉!第一次的时候,不是先执行x1,而是先执行出alert(bRun);后才执行x1。 
    第二次好像就好了! 本来也不是采用这样的结构。本来也是在x1方法里面就innerHTML错误字符串的!可是由于省略号的地方还有很多代码需要执行,而执行了x1方法以后,程序还有继续向下执行,所以才采用现在的结构!可是却还是不行! 我不知道有没有办法能直接在 alert(bRun);这句的下面直接得到是否onerror事件是否被执行过了啊? 不知道我说明白了没有!55
      

  20.   

    你又饶回去了说了不是多thread了原因也分析给你了