[转]使用window.open替代window.ShowModalDialog,完成子页面和父页面之间的传值

使用window.ShowModalDialog可以完成子页面和父页面之间的传值,但是window.ShowModalDialog不是w3c的标准,有些浏览器不兼容,如Opera和一些低版本的浏览器,window.open是w3c标准写法,兼容性比window.ShowModalDialog要好,但window.open确没有window.ShowModalDialog对浏览器的阻塞式模式,在window.open代码执行完毕后,后面的代码就马上执行了,从而无法知道子窗口关闭时传递过来的值,经过1天的研究,终于实现了可以用window.open代替window.ShowModalDialog的方法,思路很简单,就是在子页面赋值完后先执行指定父页面的按钮事件再关闭,从而完成对子页面传递值的读取。代码分享出来,希望对遇到同样问题的有所帮助。

1.在父页面添加如下html代码

<input id="btnOpenCompleted" type="button" οnclick="OpenCompleted()" value="OpenCompleted" style="display: none;" />

2.在父页面添加打开子窗口的javascript代码,窗口居中显示,如下:

function OpenChild(){

window.open('GetAllUser.aspx?controlName=btnOpenCompleted',null,'modal=yes,height=300,width=640,top='+(screen.height-400)/2+',left='+(screen.width-635)/2+',toolbar=no,menubar=no,scrollbars=yes,resizable=no,location=no,status=no');

}

GetAllUser.aspx为要打开的子页面,controlName表示在子页面中完成赋值后,执行父页面中的按钮的id名称

3.btnOpenCompleted按钮点击执行的js代码,用于完成对子页面传递过来的值的读取

function OpenCompleted(){
    var returnValue= window.ReturnValue;//子页面传过来的值
    if(returnValue!="" && typeof returnValue!="undefined"){

      var value=returnValue.substring(returnValue.indexOf("[")+1,returnValue[i].lastIndexOf(']')); 

      ....

    }

 }

4.子页面关键代码

if (!IsPostBack)
{

  if (!string.IsNullOrEmpty(Request.QueryString["controlName"]))
      hfExecuteControl.Value = Request.QueryString["controlName"];

}
<asp:HiddenField ID="hfExecuteControl" runat="server" />//从父页面传过来的controlName=btnOpenCompleted,后台赋值读取

<input id="btnOk" type="button" value="确定" class="btn" οnclick="ok()" />

function ok(){//选择
    window.returnValue="123123";
    if(window.opener!=null)
        window.opener.ReturnValue="123123";
        var parentControlName=document.getElementById("hfExecuteControl").value;
        if(parentControlName!=""){
              if(window.opener!=null)
                     window.opener.document.getElementById(parentControlName).click();
              else
                     window.parent.document.getElementById(parentControlName).click();
       }
       window.close();
}

父页面直接调用OpenChild()方法即可,对子页面传递过来的值在OpenCompleted()方法里面进行处理。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值