求助! 在javascript中增加一个alert, 后面的程序就可以正常执行,请问如何才能在不加alert的情况下使用程序能正确运行 ? 谢谢
var sHTML = "<object  id=\"Wb\" classid=\"clsid:F2A9770D-BDAD-46BD-BFC2-F6DAB2DB9671\""
+"codebase=\"c:/wb/wb.dll\"  width=\"100%\"   height=\"100%\" "
+"</object>"//
banner.innerHTML=(sHTML);alert("version");//就是这一句, 如果有,则后面的document.getElementById能成功,否则不成功

var x=document.getElementById("Wb");
if (x.Caption==undefined)
{}
else
{}

解决方案 »

  1.   

    你的object是动态加载的, 所以在没有加载完的时候下面的代码就执行了。 给object加一个onload事件
      

  2.   

    试一下:    //alert("version");
        banner.innerHTML=sHTM;
        setTimeout(function(){
            var x=document.getElementById("Wb");
            alert(x);
            if (x.Caption==undefined)
            {}
            else
            {}
        },0);
      

  3.   

    谢谢!请问如何加onload事件?以前没用过js
      

  4.   

    也谢谢xzy21com! 我也试试您发的代码
      

  5.   

    banner.innerHTML=(sHTML);checkedObj();function checkedObj(){
    var x=document.getElementById("Wb");
    if(!x){setTimeout(checkedObj,100);     // 递归判断
    return;
    }
    if (x.Caption==undefined)
    {}
    else
    {} 
    }
      

  6.   

    刚用的Chrome,好像不响应setTimeout
    准备搞一个延时函数试试
      

  7.   

    怎么看都像感觉是一个加载 顺序的问题呢,  有的时候我好像也在无形中遇到过类似的问题,
    你加一个 window.onload =function(){
    var x=document.getElementById("Wb");
    if (x.Caption==undefined)
    {}
    else
    {} 
    }
    这样会等所有的doc结构以及元素全部加载完毕之后 才会执行的,试试看,
    如果不行 把你的object 也放进来onload事件里面看看
      

  8.   

    原因如一楼所言,其实加个轮训就行banner.innerHTML=(sHTML);
    setTimeout(function(){
    var x=document.getElementById("Wb");
    if(x){
    if (x.Caption==undefined)
    {}
    else
    {}
    }
    else
    {
    setTimeout(argument.callee,50);
    }},50);
      

  9.   


    //alert("version");//就是这一句, 如果有,则后面的document.getElementById能成功,否则不成功
    var work=function(){
        var x,count=0,       //x为局部变量,count为计数器
            checkCount=20,   //checkCount为最多尝试多少次去查找wb,这里为20次
            interval=50,     //interval为多长时间尝试查找一次,这里为50毫秒
            check=function(){
                x=document.getElementById("Wb");
                count++;
                if(x!=null){
                    //找到wb后想要干什么在此处理
                    if (x.Caption==undefined)
                    {}
                    else
                    {}
                }
                else if(count>checkCount){
                    alert('已经过了一秒多了,还是没能找到对应的dom对象');
                }
                else{
                    setTimeout(check,interval);
                }
            };
        check();
    };
    work();
      

  10.   

    为什么我试了没有这个情况出现呢,ie,火狐,chrome都试了。<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312"><title>无标题文档</title>
    </head>
    <body >
    <div id="bannerH"></div>
    <div class="div_css">测试</div>
    </body>
    <script>
    var sHTML = "<object  id=\"Wb\" classid=\"clsid:F2A9770D-BDAD-46BD-BFC2-F6DAB2DB9671\""
    +"codebase=\"c:/wb/wb.dll\"  width=\"100%\"   height=\"100%\" "
    +"</object>"
    var banner = document.getElementById("bannerH");
    banner.innerHTML=(sHTML);
    //alert("version");//就是这一句, 如果有,则后面的document.getElementById能成功,否则不成功
    var x=document.getElementById("Wb");
    alert(x);
    if (x.Caption==undefined)
    {}
    else
    {} 
    </script>
    </html>
      

  11.   

    ...我判断应该是,你加那个alert以后,页面显示消息框,JS暂停执行,然后就有时间等页面元素加载完了。然后你运行那个getElementById的时候,可以找到那个元素。如果你不加alert的话,执行getElementById的时候你要找的这个元素还没有在页面中加载完,所以就找不到了。建议你参考9楼的方法,在onLoad(form的onload或者jQuery的ready事件)中执行那段getElementById,保证页面元素要先加载完成。
    有同学使用循环查找的,设置,我觉得,这样不是太好,别拿人家的电脑玩过家家嘛。
      

  12.   

    并不是所有的dom节点都能够在onLoad事件中处理,在IE下,ActiveX控件尤其明显,其他插件更是明显。
      

  13.   

    谢谢各位!大家基本上发现了问题,也就是控件还没准备好就要去查询在不在,有一位朋友用轮询的方法解决了,感觉比较复杂
    准备用onload的方法再试试,有结果再汇报吧
      

  14.   

    上面的基本都没有实质解决问题, 后面改用NPAPI搞定的,后面在另外一个网上找了一位朋友写了一段很复杂的代码可以搞定,好像也不是很爽,但是能运行。
    我后面没用这段代码,采用NPAPI搞定。 谢谢大家参与!