对话框一般分为两种类型:模态类型(modal)与非模态类型(modeless)。
所谓模态对话框,就是指除非采取有效的关闭手段,用户的鼠标焦点或者输入光标将一直停留在其上的对话框。非模态对话框则不会强制此种特性,用户可以在当前对话框以及其他窗口间进行切换。本文介绍如何使用JavaScript语言来创建这两种类型的对话框、控制其大小和位置、改变其外观以及在对话框间的数据传递。(引用)
一、创建模态和非模态对话框
创建模态对话框:(会缓存最近一次页面的值,通过一些设置可绕过系统的判断)
vReturnValue = window.showModalDialog(sURL [, vFreeArgument] [, sOrnaments]);
创建非模态对话框:(不会)
vReturnValue = window.showModelessDialog(sURL [, vFreeArgument] [, sOrnaments]);
· VReturnValue:对于showModalDialog(),它表示被打开的对话框窗口设置的returnValue属性值。对于showModelessDialog(),它表示新窗口对象。
· VFreeArgument:这个参数可用于传递某种类型的数据到打开的对话框,数据可以是一个数值、字符串、数组或者一个对象类型。在新窗口中引用这个数值时,可通过新创建window对象的dialogArguments 属性。
· SOrnaments:用这个参数指定新窗口的外观。可选择的窗口属性有很多种,当有多种控制需求时,将相关内容用一个字符串连接起来,其间用分号隔开。以下是可选择的属性种类:
o dialogHeight: sHeight
o dialogLeft: sXpos
o dialogTop: sYpos
o dialogWidth: sWidth
o center: ( yes | no | 1 | 0 | on | off )
o dialogHide: ( yes | no | 1 | 0 | on | off )
o edge: ( sunken | raised )
o help: ( yes | no | 1 | 0 | on | off )
o resizable: ( yes | no | 1 | 0 | on | off )
o scroll: ( yes | no | 1 | 0 | on | off )
o status: ( yes | no | 1 | 0 | on | off )
模态窗口window.showModalDialog与非模态窗口window.showModellessDialog
1、基本知识
showModalDialog() (IE 4+ 支持) showModelessDialog() (IE 5+ 支持) window.showModalDialog()方法用来创建一个显示HTML内容的模态对话框。 window.showModelessDialog()方法用来创建一个显示HTML内容的非模态对话框。 |
2、使用方法
vReturnValue=window.showModalDialog(sURL[,vArguments][,sFeatures]); vReturnValue=window.showModelessDialog(sURL[,vArguments][,sFeatures]); |
3、参数说明
参数名称 | 性质 | 类型 | 作用 |
sURL | 必选 | 字符串 | 用来指定对话框要显示的网页的URL。 |
vArguments | 可选 | 变体 | 用来向对话框传递参数。参数类型不限。 对话框通过window.dialogArguments来取得传递进来的参数。 |
sFeatures | 可选 | 字符串 | 用来描述对话框的外观等信息 |
4、sFeatures参数说明
参数名称 | 参数属性 | 说明 |
dialogHeight | npx | 对话框高度,不小于100px |
dialogWidth | npx | 对话框宽度 |
dialogLeft | npx | 离主窗口左的距离 |
dialogTop | npx | 离主窗口上的距离 |
center | {yes | no | 1 | 0 } | 窗口是否居中,默认yes |
help | {yes | no | 1 | 0 } | 是否显示帮助按钮,默认yes |
resizable | {yes | no | 1 | 0 } | 是否可改变大小,默认no |
status | {yes | no | 1 | 0 } | 是否显示状态栏,默认为yes[ Modeless]或no[Modal] |
dialogHide | { yes | no | 1 | 0 | on | off } | 在打印或者打印预览时对话框是否隐藏,默认为no |
scroll | { yes | no | 1 | 0 | on | off } | 指明对话框是否显示滚动条,默认为yes |
edge | { sunken | raised } | 指明对话框的边框样式,默认为raised |
unadorned | { yes | no | 1 | 0 | on | off } | 默认为no |
注意:dialogHide,edge,unadorned这三个属性是用在HTA(HTML Aplication)中的,一般网页上用不到。 |
5、参数传递 通过vArguments来传递参数,类型不限制,对于字符串类型,最大为4096个字符,也可以传递对象,例如:
parent.htm <script> window.showModalDialog("sun.htm","传递进去的参数","help:no;scroll:no"); </script> sun.htm <script> alert("传来的参数:" + window.dialogArguments); </script> |
6、返回值 通过window.returnValue向打开对话框的窗口返回信息,也可以是对象。例如:
parent.htm <script> result=window.showModalDialog("son.htm","","help:no;scroll:no"); alert(result); </script> son.htm <script> window.returnValue="这里存放返回的结果"; </script> |
7、防止在模态窗口中提交后新开一窗口
在页面的 <body>前加入<base target="_self">
8、调用父窗口的方法同时传递参数
parent.htm <script> function show(){//父窗口的方法 alert("show"); } var arg=new Object();//传递进去的参数 arg.win=window;//把当前窗口的引用当参数传进去 arg.str="argument";//要传进去的其他参数 window.showModalDialog("son.htm",arg,'help:no'); </script> son.htm <script> var arg=window.dialogArguments; alert(arg.str); arg.win.show();//调用父窗口的方法 </script> |