2011-03-21 170 views
0

我尝试重新加载我的jqgrid,点击IE8弹出窗口中的关闭按钮。但它给了我几个错误,现在我试图重新加载它在页面本身。这意味着不是从弹出窗口中,而是在按下弹出窗口中的“关闭”按钮时运行一个函数(驻留在主页面中)。 我得到一个错误 - 'window.opener.document' 为空或不是一个对象(IE8),请在下面找到我的代码 -从窗口弹出IE浏览器重新加载jqgrid 8

弹出窗口功能 -

function closeUserPopup(){ 

//var x = window.opener.document.getElementById("myjqgrid"); 
//alert(x); 
window.opener.document.callReload(); 
window.close(); 

}

在父页面

函数重载jqgrid-

function callReload(){ 
jq("#mygrid").trigger("reloadGrid"); 

}

有没有办法从弹出窗口重新加载父页面jqgrid? ?(在它关闭之前)提前致谢。

回答

0


这不是window.opener.documentwindow.opener
尝试检查首战之前仍然有效。
我平时做这样的事情:

if (window.opener != null) 
    window.opener.callReload(); 
window.close(); 

一点建议。
我已经放弃了像这样的弹出,因为他们很难管理。
我倾向于使用jQuery UI Dialog,所以我可以管理同一页面上的所有内容。

UPDATE

如果您使用window.showModalDialog();事情更加简单。
下面是一个例子:

<script type="text/javascript"> 
    function OpenDialog(userPopupUrl) 
    { 
     alert("starting!"); 
     var vReturnValue = window.showModalDialog(userPopupUrl,"dialogWidth:450px;dialogHeight:100­px;center:yes;resizable:no;status:no;help:no;"); 
     alert("I am here!"); 
     // You can refresh whatever you want here!!!! 
    } 
</script> 

既然你创建一个对话框,在客户端脚本过程停止,直到关闭弹出窗口。在那个时候,你的javascript获得了控制权,并且可以触发一些其他操作。 PS:您可以像我一样使用返回值作为状态here

+0

感谢您的回复。但是由于其空值,所以if块内的代码不会被执行。所以我不能使用该功能重新加载grid.will尝试转移到jQuery UI对话框。但在我看来,IE8中存在一些问题,比如在其他浏览器中,全身'div'标签的不透明(当出现对话框时)在IE8中不透明。 :( – Sam 2011-03-22 13:40:58

+0

@Sam:你怎么打开你的弹出窗口?我已经在过去使用了它的次数,并且它一直工作,即使使用IE8。试着指定窗口的名称,如下所示:window.open(“ Page2.html“,”mywindow“);它必须工作,至于IE8,那么,你期望什么;它与酸测试得分20/100 http://acid3.acidtests.org/ – LeftyX 2011-03-23 09:05:35

+0

我打开一个模型像下面的对话框 - '窗口。在showModalDialog(userPopupUrl,期权, “dialogWidth:450像素; dialogHeight:100px的;中心:是的,调整大小:无;状态:无;帮助:无;”);” – Sam 2011-03-23 13:44:52

0

也许不是最好的做法,但:

(function() { 
    var parentLocation = window.opener.location; 
    window.opener.location = parentLocation; 
})(); 
+0

非常感谢您的指导。但我对代码不太清楚,因为我需要在popup关闭时重新加载我的jqgrid。在我看来,上面的代码会刷新我的整个页面。你可以解释一下吗?再次感谢。 – Sam 2011-03-22 01:41:24