var objInfo=oGrid.GetCurrent(true);
          var projectno=objInfo["pjhd_cProjectNo"];
          var productid=objInfo["pjpd_cProductID"];
          window.parent.parent.frames["menu"].insertTab('預排排期','../CD/GetCenterInfo.aspx');
          var prePlanWindow=window.parent.document.getElementById('frm_預排排期').contentWindow;
          prePlanWindow.document.getElementById("prm_cProjectNo_").value=projectno;
          prePlanWindow.document.getElementById("prm_cProductID_").value=productid;
          prePlanWindow.document.getElementById("btn_Search_").click();上面是我的js,说明一下,projectno和productid的取值没问题
下面的insertTab是在窗口插入一个新的tab,如果已存在就打开这个tab,每个tab以iframe的形式存在div里,如果点击这个tab就隐藏其他div,显示这个div。
prePlanWindow可以取到值,就是window GetCenterInfo.aspx,当没有这个tab的时候,在IE下最后三行脚本都会报错,说是getElementById取不到值;有这个tab的时候正常可以运行。
用firefox 去调试,一步步的跟下来没有问题,但是在firefox下直接运行依然是最后三行脚本都会报错。
感觉上好像浏览器执行脚本时不是像调试时每步都会有结果?为什么我一步步调试的时候就不会报错?
下面是html,三个div分别是三个tab。问题总结就是要在prePlanWindow这个值的相应div已经存在时上面的脚本才能正常运行,而insertTab执行的也是当没有这个div时就插入这个div,为什么还是不行呢?
<frame scrolling="no" src="WebUI/Page.aspx" noresize="" marginheight="0" marginwidth="0" name="page" id="page">
<html xmlns="http://www.w3.org/1999/xhtml"><head id="Head1">body style="margin: 0px;">
    <form id="form1" action="Page.aspx" method="post" name="form1"><div id="控制台" style="display: none;">
<iframe width="100%" height="100%" frameborder="0" scrolling="auto" style="border-left: 1px solid rgb(101, 147, 207); border-right: 1px solid rgb(101, 147, 207); border-bottom: 1px solid rgb(101, 147, 207);" src="../WebUI/Desktop.aspx" background="../bkground.gif" id="frm_控制台"></iframe></div><div id="調度查詢中心" style="display: none;"><iframe width="100%" height="100%" frameborder="0" scrolling="auto" style="border-left: 1px solid rgb(101, 147, 207); border-right: 1px solid rgb(101, 147, 207); border-bottom: 1px solid rgb(101, 147, 207);" src="../CD/SearchCenterList.aspx" background="../bkground.gif" id="frm_調度查詢中心"></iframe></div><div id="預排排期"><iframe width="100%" height="100%" frameborder="0" scrolling="auto" style="border-left: 1px solid rgb(101, 147, 207); border-right: 1px solid rgb(101, 147, 207); border-bottom: 1px solid rgb(101, 147, 207);" src="../CD/GetCenterInfo.aspx" background="../bkground.gif" id="frm_預排排期"></iframe></div></form>
</body></html>
</frame>

解决方案 »

  1.   

    var prePlanWindow=window.parent.document.getElementById('frm_預排排期').contentWindow;
    设断点,这步后在直接运行就ok,在这步执行之前直接运行就报错
      

  2.   

    最新试验结果··在
    var prePlanWindow=window.parent.document.getElementById('frm_預排排期').contentWindow;
    后面加个alter,可以正常
    有没有高手能根据这个解释一下js代码是怎么运行的呢?我是菜鸟···不懂原理
      

  3.   

    你动态添加tab页。getElementById 找不到 这个html对象 ,可能就是这个html对象还没有渲染到html页面,看看有没有异步执行操作。可以做相应的延时操作。
      

  4.   

    我也是在想 我在那句后面加个alter随便什么值然后确认后就没问题了
    就是不知道有什么语句可以延时的·求教啊