向模态窗体传递参数和获取返回值

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>
这样可以防止在模态窗体中点击按钮提交时打开新窗体的问题。

原文地址:https://www.cnblogs.com/weekend001/p/1552911.html