[原创]总结showModalDialog在开发中的一些问题_Android, Python及开发编程讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  Android, Python及开发编程讨论区 »
总帖数
3
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 2860 | 回复: 2   主题: [原创]总结showModalDialog在开发中的一些问题        下一篇 
    本主题由 一萧烟雨 于 2015-1-29 15:01:37 取消精华
一萧烟雨
注册用户
等级:列兵
经验:88
发帖:1
精华:0
注册:2015-1-28
状态:离线
发送短消息息给一萧烟雨 加好友    发送短消息息给一萧烟雨 发消息
发表于: IP:您无权察看 2015-1-29 14:54:24 | [全部帖] [楼主帖] 楼主

一、在页面调用window.open()函数后,可以直接在打开的页面中用window.opener来调用父页面的方法,然而如果用 showModalDialog打开一个模态窗口,就不能通过window.opener去调用父窗口的方法了,这时,要用 window.dialogArguments去调用,注意在showModalDialog方法中的第二个参数是window,即把当前窗口传给子页面,所以子页面才可以通过window.dialogArguments去调用父页面的方法。
父页面js如下:

//显示设置页面 
function showSet(url) {
      //showWin(800, 600, "FieldShowSet.aspx" + url, "set");
      open_Dialog("FieldShowSet.aspx" + url, window, 800, 640);
}
//触发查询事件 
function searchData() {
      var btn = document.getElementById("<%=btnQuery.ClientID %>");
      btn.click();
}


子页面js如下:

function CloseWin() {
      //alert('设置成功!'); window.opener.searchData(); window.close(); 
      var pWindow = window.dialogArguments;
      if (pWindow != null) {
            pWindow.searchData();
      } else {
      window.opener.searchData();
}
window.close();
}
二、当我们在模态窗体中刷新时,会打开一个新页面,这是我们可以通过在<head>中加上如下代码解决这一问题:
<base target="_self"/>
另外,当在模态窗体中刷新时,由于是提交到当前页,数据并不会更改,因为它是从页面缓存中读取数据,要让其变更,我们可以通过在<head>中添加如下代码清除缓存即可:
<meta http-equiv="pragma" content="no-cache"/>
<meta http-equiv="cache-control" content="no-cache,must-ridate"/>
<meta http-equiv="expires" content="0"/>


三、模态窗体居中显示

//路径地址,window对象,宽,高 
function open_Dialog(url, win,Width, Height) {
      var return_Value;
      var iTop2 = (window.screen.availHeight - 20 - Height) / 2;
      var iLeft2 = (window.screen.availWidth - 10 - Width) / 2;
      var height2 = Height - 40;
      if (document.all && window.print) {
            return_Value = window.showModalDialog(url, win, "dialogLeft:" + iLeft2 + "px;dialogTop:" + iTop2 + "px;dialogWidth:" + Width +
            "px;dialogHeight:" + Height + "px;center:yes;status:no;scroll:no;help:no;");
      }
      else {
            window.open(url, win, "top=" + iTop2 + ",left=" + iLeft2 + ",width=" + Width + "px,height=" + height2 + "px,resizable=1,scrollbars=0");
      }
}


四、替代解决方案

个人更偏向于使用第三方的js库(jquery)来实现悬浮可拖动的遮罩层来实现此效果,既快速又美观,而且兼容性非常好。如lhgdialog.min.js 下载地址:Scripts
首先在需要使用居中模态效果的界面添加jquery.js引用和lhgdialog.min.js引用如下:

<script src="scripts/jquery.js" type="text/javascript"></script>
<script src="scripts/lhgdialog.min.js?self=true&skin=iblue" type="text/javascript"></script>


调用方式如下:

<script type="text/javascript">
function showConfigSet() {
      var nowtime = new Date();
var dg = new $.dialog({ 

                  id: "ChooseAccount", 

                  title: "配置参数", 

                  content: "
url:UpdateConfig.aspx?NowTime=" + nowtime,
width: 600,
height: 410,
max: false,
min: false,
lock: true,
close: true
});
dg.show();
}
</script>


效果图:
北京联动北方科技有限公司

关于此弹出窗口组件更加详细的配置信息请查看:http://www.weiboxiu.cn/plugin/lhgdialog4/api.html




赞(0)    操作        顶端 
yr
注册用户
等级:少校
经验:1085
发帖:5
精华:0
注册:2015-1-19
状态:离线
发送短消息息给yr 加好友    发送短消息息给yr 发消息
发表于: IP:您无权察看 2015-1-29 16:16:09 | [全部帖] [楼主帖] 2  楼

来围观 北京联动北方科技有限公司



赞(0)    操作        顶端 
panpan.nie
注册用户
等级:大校
经验:4754
发帖:217
精华:2
注册:1970-1-1
状态:离线
发送短消息息给panpan.nie 加好友    发送短消息息给panpan.nie 发消息
发表于: IP:您无权察看 2015-4-1 16:16:33 | [全部帖] [楼主帖] 3  楼

北京联动北方科技有限公司



赞(0)    操作        顶端 
总帖数
3
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论