补(2005-10-24整理)
在Web开发中,常常需要在当前窗口打开一个窗口(称为子窗口)
如:选择用户,我们就需要弹出一个用户列表的窗口,在这个窗口中我们可以对用户进行搜索,分页等操作,进而选择用户
而在当前窗口中如何得到选择的用户信息呢?
这就涉及到在父窗口中如何得到子窗口的值?
就本人在项目中的实践来描述如下两种方案,本文中服务端采用jsp实现(这个不是主要的,可以移植到任何服务端编程)
方法一: 利用showModalDialog打开子窗口,并用returnValue=xxxx取得返回值
缺点:在子窗口中如要进行分页的操作(a标签的原因)比较难实现 受浏览器版本影响
方法二:
利用Window.open打开子窗口
在当前窗口中定义如下JavaScript脚本
function XXX(inputName,inputId){
window.open("test.jsp?inputname="+inputName+"&inputid="+inputId,"其它打开窗口的参数");
}
<input type="text" name="txtUserName" readonly value="">
<input type="hidden" name="UserID" value="">
<input type="button" value="选择..." οnclick="XXX('txtUserName',UserID);">
在open的子窗口中核心代码:
String inputName=request.getParameter("inputname");
String inputId=request.getParameter("inputid");
注意:分页操作应该将上述两个参数一起带入
将选中的值回写到父窗口中JavaScript代码:
window.opener.document.all.<%=inputId%>.value="";
window.opener.document.all.<%=inputName%>.value="";
总结:主要通过window.opener在打开的子窗口中操纵其父窗口来实现将子窗口中的值的回写
扩展运用:在打开的子窗口中刷新父窗口 window.opener.location.reload();