向模态窗体传递参数和获取返回值
1.向window.showModalDialog 传递参数:
window.showModalDialog 方法的第二个参数就代表父窗体传递到模态窗体的参数值,可以为任何对象或数组),也可以不传递参数,直接为null就行。此参数是可选的。原型如下:
vReturnValue = window.showModalDialog(sURL [, vArguments] [, sFeatures])
例子:
var params = [document.getElementById("tbCorpName"),document.getElementById("tbCorpId")]; //参数
var returnValue = window.showModalDialog("selectclient.aspx",params ,"dialogLeft:1px;dialogTop:1px;dialogWidth:500px;dialogHeight:430px;resizable:yes;status:no");
这样我们就可以在模态窗体中用 window.dialogArguments 属性获取传递进来的参数。
function setCorpName(corpname,corpid)
{
var params = window.dialogArguments ; //获取父窗体传递进来的参数;
params[0].value = corpname; //设置父窗体中文本域字段的值。
params[1].value = corpid;
self.close(); //关闭模态窗体。
}
这种方式在Firefox 下有个问题。如果模态窗体是动态页面(aspx页面),如果在模态窗体中涉及到与服务器端交互的话,如“查询”事件,则当点击“查询”按钮后,firefox 中就再也不能通过 window.dialogArguments 属性获取到传递进来的参数。也就是说在Firefox 中只是第一次弹出窗体时,能够获取到父窗体传递的参数,其他任何与服务器交互后,都将导致参数信息丢弃。IE中不存在这个问题。所以如果你想在模态窗体中访问父窗体中的对象,最好不要采用这种方式。看下面第二种方式:
2.从模态窗体获取返回值:
window.showModalDialog 方法的返回值就是模态窗体的的返回值。通过在模态窗体中用 window.returnValue 属性设置。
//父窗体代码:
var returnValue = window.showModalDialog("selectclient.aspx",null,"dialogLeft:1px;dialogTop:1px;dialogWidth:500px;dialogHeight:430px;resizable:yes;status:no");
if(returnValue)
{
var arrValue = returnValue.split(":"); //以冒号分隔值
document.getElementById("tbCorpName").value = arrValue[0];
document.getElementById("tbCorpId").value = arrValue[1];
}
//模态窗体代码:
function setCorpName(corpname,corpid)
{
window.returnValue = corpname + ":" + corpid; //设置从模态窗体返回的值
self.close();
}
另外注意在模态窗体的<head> 区加上:
<base target="_self"></base>
这样可以防止在模态窗体中点击按钮提交时打开新窗体的问题。