JS对话框_JS模态对话框showModalDialog用法总结


Posted in Javascript onJanuary 11, 2014

父窗口:

<html>
<head>
<title>无标题页</title>
<script language="javascript" type="text/javascript">
function opendialog1()
 {
 var someValue=window.showModalDialog("b.html","","dialogWidth=500px;dialogHeight=500px;status=no;help=no;scrollbars=no");
 document.form1.p1t.value=someValue;
 }
</script>
</head>
<body>
<form name="form1" action="#">
<input type="text" name="p1t">
<input type="button" value="打开对话框" onclick="opendialog1()">
</form>
</body>
</html>

子窗口:
<html>
<head>
<title>无标题页</title>
<script language="javascript" type="text/javascript">
function a()
{
var wname = document.form1.backname.value;
parent.window.returnValue=wname; //父窗口就是上一个页面
 window.close();
}
</script>
</head>
<body>
<form name="form1" action=""> 
<input type="text" value="输入要传的值" name="backname">
<input type="button" value="传值" onclick="return a()">
</form>
</body>
</html>

---- 1. 基本语法

---- window对象有一个方法称为showModalDialog ,我们可以在页面按钮的onclick中写如下代码:

< BUTTON onclick="window.showModalDialog
('dialog.htm')" >Search< /BUTTON >

---- 系统会在新窗口中打开dialog.htm页面,并且等待用户响应,如果用户不响应该页面,那么主页面将得不到光标。
---- 在dialog.htm中设置window对象的returnValue属性,就可以让主页面得到返回值。例如,在页面的确定按钮的onclick中写:

window.returnValue = window.
document.all.iptPeopleID.value

---- 将输入框iptPeopleID的值赋给window对象的returnValue属性。在主页面中就可以得到这个值:
var str = showModalDialog ("dialog1.htm")

---- 2. 传递初始化值
---- 如果要向模态页面中传递初始化值,可以在主页面中用如下语句:

var cSearchValue=showModalDialog
('dialog.htm', 'ABC')
在dialog.htm中使用window.dialogArguments
属性可以得到'ABC'。例如:
< SCRIPT FOR=window EVENT=onload LANGUAGE="JScript" >
if (window.dialogArguments != null)
window.document.all.iptPeopleID.value = window.dialogArguments;
< /SCRIPT >

---- 3. 传递多个数值
---- 如果要向模态页面中传递多个参数,可以先在主页面中定义一个对象,

function myDialog() {
var str1;
var str2;
}

---- 显示模态页面之前初始化该对象,然后调用showModalDialog 方法。
function WelcomeYou(iniStr1,iniStr2) {
myDialog.str1 = iniStr1;
myDialog.str2 =iniStr2 ;

if (showModalDialog ("dialog2.htm", myDialog)
==false) //将对象传入
......

---- 在模态页面中,可以用这样的代码
window.document.all.iptID.value=
window.dialogArguments.str1
来引用数值,或者用这样的代码对之赋值
window.dialogArguments.str1 =
window.document.all.iptID.value

---- 完整例程如下:
---- 对于只传递一个参数的情况,见:Main1.htm和dialog1.htm。

---- 对于传递多个参数的情况,见:Main2.htm和dialog2.htm。

父窗体:
dim xxx '返回值
dim yyy '传到子窗体的参数
var xxx = ShowModalDialog ('xxx.asp','yyy','dialogWidth:100px;DialogHeight=290px;status:no')
子窗体:
dim yyy '从父窗体传来的参数
dim xxx '传回父窗体的参数
yyy = window.dialogArguments
xxx = window.returnValue
 

window.dialogArguments的用法

Javascript有许多内建的方法来产生对话框,如:window.alert(),window.confirm(),window.prompt().等。然而IE提供更多的方法支持对话框。如:

showModalDialog()(IE4+支持)
showModelessDialog()(IE5+支持)

window.showModalDialog()方法用来创建一个显示HTML内容的模态对话框,由于是对话框,因此它并没有一般用window.open()打开的窗口的所有属性。
window.showModelessDialog()方法用来创建一个显示HTML内容的非模态对话框。

当我们用showModelessDialog()打开窗口时,不必用window.close()去关闭它,当以非模态方式[IE5]打开时,打开对话框的窗口仍可以进行其他的操作,即对话框不总是最上面的焦点,当打开它的窗口URL改变时,它自动关闭。而模态[IE4]方式的对话框始终有焦点(焦点不可移走,直到它关闭)。模态对话框和打开它的窗口相联系,因此我们打开另外的窗口时,他们的链接关系依然保存,并且隐藏在活动窗口的下面。

使用方法如下:
vReturnValue=window.showModalDialog(sURL[,vArguments][,sFeatures])
vReturnValue=window.showModelessDialog(sURL[,vArguments][,sFeatures])

参数说明:
sURL
必选参数,类型:字符串。用来指定对话框要显示的文档的URL。
vArguments
可选参数,类型:变体。用来向对话框传递参数。传递的参数类型不限,包括数组等。对话框通过window.dialogArguments来取得传递进来的参数。
sFeatures
可选参数,类型:字符串。用来描述对话框的外观等信息,可以使用以下的一个或几个,用分号“;”隔开。
dialogHeight对话框高度,不小于100px,IE4中dialogHeight和dialogWidth默认的单位是em,而IE5中是px,为方便其见,在定义modal方式的对话框时,用px做单位。
dialogWidth:对话框宽度。
dialogLeft:距离桌面左的距离。
dialogTop:离桌面上的距离。
center:{yes|no|1|0}:窗口是否居中,默认yes,但仍可以指定高度和宽度。
help:{yes|no|1|0}:是否显示帮助按钮,默认yes。
resizable:{yes|no|1|0}[IE5+]:是否可被改变大小。默认no。
status:{yes|no|1|0}[IE5+]:是否显示状态栏。默认为yes[Modeless]或no[Modal]。
scroll:{yes|no|1|0|on|off}:指明对话框是否显示滚动条。默认为yes。

还有几个属性是用在HTA中的,在一般的网页中一般不使用。
dialogHide:{yes|no|1|0|on|off}:在打印或者打印预览时对话框是否隐藏。默认为no。
edge:{sunken|raised}:指明对话框的边框样式。默认为raised。
unadorned:{yes|no|1|0|on|off}:默认为no。

传入参数:
要想对话框传递参数,是通过vArguments来进行传递的。类型不限制,对于字符串类型,最大为4096个字符。也可以传递对象,例如:

test1.htm
====================
<script>
varmxh1=newArray("mxh","net_lover","孟子E章")
varmxh2=window.open("about:blank","window_mxh")
//向对话框传递数组
window.showModalDialog("test2.htm",mxh1)
//向对话框传递window对象
window.showModalDialog("test3.htm",mxh2)
</script>

test2.htm
====================
<script>
vara=window.dialogArguments
alert("您传递的参数为:"+a)
</script>

test3.htm
====================
<script>
vara=window.dialogArguments
alert("您传递的参数为window对象,名称:"+a.name)
</script>

可以通过window.returnValue向打开对话框的窗口返回信息,当然也可以是对象。例如:

test4.htm
===================
<script>
vara=window.showModalDialog("test5.htm")
for(i=0;i<a.length;i++)alert(a[i])
</script>

test5.htm
===================
<script>
functionsendTo()
{
vara=newArray("a","b")
window.returnValue=a
window.close()
}
</script>
<body>
<form>
<inputvalue="返回"type=buttononclick="sendTo()">
</form>

常见问题:
1,如何在模态对话框中进行提交而不新开窗口?
如果你的浏览器是IE5.5+,可以在对话框中使用带name属性的iframe,提交时可以制定target为该iframe的name。对于IE4+,你可以用高度为0的frame来作:例子,

test6.htm
===================
<script>
window.showModalDialog("test7.htm")
</script>

test7.htm
===================
if(window.location.search)alert(window.location.search)
<framesetrows="0,*">
<framesrc="about:blank">
<framesrc="test8.htm">
</frameset>

test8.htm
===================
<formtarget="_self"method="get">
<inputname=txtvalue="test">
<inputtype=submit>
</form>
<script>
if(window.location.search)alert(window.location.search)
</script>
2,可以通过http://servername/virtualdirname/test.htm?name=mxh方式直接向对话框传递参数吗?
答案是不能。但在frame里是可以的。

Javascript 相关文章推荐
JavaScript使用过程中需要注意的地方和一些基本语法
Aug 26 Javascript
js 字符串转换成数字的三种方法
Mar 23 Javascript
js获取页面传来参数的方法
Sep 06 Javascript
javascript中hasOwnProperty() 方法使用指南
Mar 09 Javascript
JavaScript使用function定义对象并调用的方法
Mar 23 Javascript
chrome浏览器当表单自动填充时如何去除浏览器自动添加的默认样式
Oct 09 Javascript
javascript中Date对象应用之简易日历实现
Jul 12 Javascript
原生js实现密码输入框值的显示隐藏
Jul 17 Javascript
Vue2.0 实现移动端图片上传功能
May 30 Javascript
Vue动态控制input的disabled属性的方法
Jun 26 Javascript
antd Select下拉菜单动态添加option里的内容操作
Nov 02 Javascript
Vue-router编程式导航的两种实现代码
Mar 04 Vue.js
Javascript自定义函数判断网站访问类型是PC还是移动终端
Jan 10 #Javascript
兼容主流浏览器的iframe自适应高度js脚本
Jan 10 #Javascript
javascript遍历控件实例详细解析
Jan 10 #Javascript
关闭ie窗口清除Session的解决方法
Jan 10 #Javascript
js出生日期 年月日级联菜单示例代码
Jan 10 #Javascript
JS实现根据出生年月计算年龄
Jan 10 #Javascript
javascript使用百度地图api和html5特性获取浏览器位置
Jan 10 #Javascript
You might like
DOTA2 1月28日更新:监管系统降临刀塔世界
2021/01/28 DOTA
PHP5/ZendEngine2的改进
2006/10/09 PHP
php根据操作系统转换文件名大小写的方法
2014/02/24 PHP
浅谈PHP定义命令空间的几个注意点(推荐)
2016/10/29 PHP
网页中可关闭的漂浮窗口实现可自行调节
2013/08/20 Javascript
node.js中的console.trace方法使用说明
2014/12/09 Javascript
js运动应用实例解析
2015/12/28 Javascript
分享有关jQuery中animate、slide、fade等动画的连续触发、滞后反复执行的bug
2016/01/10 Javascript
jQuery UI库中dialog对话框功能使用全解析
2016/04/23 Javascript
JS onkeypress兼容性写法详解
2016/04/27 Javascript
使用vux实现上拉刷新功能遇到的坑
2018/02/08 Javascript
在vue中读取本地Json文件的方法
2018/09/06 Javascript
vue-cli构建vue项目的步骤详解
2019/01/27 Javascript
详解mpvue中小程序自定义导航组件开发指南
2019/02/11 Javascript
Vue 中使用富文本编译器wangEditor3的方法
2019/09/26 Javascript
JS实现移动端可折叠导航菜单(现代都市风)
2020/07/07 Javascript
[01:06] DOTA2英雄背景故事第三期之秩序法则光之守卫
2020/07/07 DOTA
[45:16]完美世界DOTA2联赛PWL S3 Magma vs Phoenix 第一场 12.12
2020/12/16 DOTA
用Python代码来解图片迷宫的方法整理
2015/04/02 Python
python获取本机外网ip的方法
2015/04/15 Python
使用Python AIML搭建聊天机器人的方法示例
2018/07/09 Python
python对离散变量的one-hot编码方法
2018/07/11 Python
python贪吃蛇游戏代码
2020/04/18 Python
详解Python3网络爬虫(二):利用urllib.urlopen向有道翻译发送数据获得翻译结果
2019/05/07 Python
利用PyCharm操作Github(仓库新建、更新,代码回滚)
2019/12/18 Python
Python中lru_cache的使用和实现详解
2021/01/25 Python
python中@contextmanager实例用法
2021/02/07 Python
python爬虫利用代理池更换IP的方法步骤
2021/02/21 Python
Python Selenium操作Cookie的实例方法
2021/02/28 Python
总裁办公室主任职责
2014/01/02 职场文书
团日活动总结模板
2014/06/25 职场文书
退学证明范本3篇
2014/10/29 职场文书
2015年度绩效考核工作总结
2015/05/27 职场文书
如何使用JavaScript策略模式校验表单
2021/04/29 Javascript
Redis Cluster 字段模糊匹配及删除
2021/05/27 Redis
mysql配置SSL证书登录的实现
2021/09/04 MySQL