Javascript有许多内建的方法来产生对话框,如:window.alert(), window.confirm(),window.prompt().等。 然而IE提供更多的方法支持对话框。如: showModalDialog() (IE 4+ 支持)
1 o/ X2 U: s: b4 C/ h showModelessDialog() (IE 5+ 支持) window.showModalDialog()方法用来创建一个显示HTML内容的模态对话框,由于是对话框,因此它并没有一般用window.open()打开的窗口的所有属性。 window.showModelessDialog()方法用来创建一个显示HTML内容的非模态对话框。 当我们用showModelessDialog()打开窗口时,不必用window.close()去关闭它,当以非模态方式[IE5]打开时, 打开对话框的窗口仍可以进行其他的操作,即对话框不总是最上面的焦点,当打开它的窗口URL改变时,它自动关闭。而模态[IE4]方式的对话框始终有焦点(焦点不可移走,直到它关闭)。模态对话框和打开它的窗口相联系,因此我们打开另外的窗口时,他们的链接关系依然保存,并且隐藏在活动窗口的下面。 使用方法如下:
# c8 E. ]) o& _" O# E& Q# g* d vReturnValue = window.showModalDialog(sURL [, vArguments] [, sFeatures])
- D: R$ u7 y" \2 d6 j2 Q' B vReturnValue = window.showModelessDialog(sURL [, vArguments] [, sFeatures]) 参数说明:# \# R, A2 t$ D8 k/ y0 }/ g9 ]
sURL/ \4 B; H) L8 q$ Z" u/ ~
必选参数,类型:字符串。用来指定对话框要显示的文档的URL。" v' ?' S) y: D
vArguments' g9 M3 K9 C5 e. m+ Y
可选参数,类型:变体。用来向对话框传递参数。传递的参数类型不限,包括数组等。对话框通过window.dialogArguments来取得传递进来的参数。
/ k1 W8 B3 u1 x: K! Z. T sFeatures6 a. r3 h) n) i2 l9 ]3 M4 R4 {
可选参数,类型:字符串。用来描述对话框的外观等信息,可以使用以下的一个或几个,用分号“;”隔开。
3 ?' T: }6 Q4 c$ Y dialogHeight 对话框高度,不小于100px,IE4中dialogHeight 和 dialogWidth 默认的单位是em,而IE5中是px,为方便其见,在定义modal方式的对话框时,用px做单位。8 p6 H0 G: i2 |, h0 T/ L
dialogWidth: 对话框宽度。
7 I) v# V1 V. Z3 H4 T6 R dialogLeft: 距离桌面左的距离。 k( n: M4 ~: m" J9 f& L: v3 M
dialogTop: 离桌面上的距离。. i! e0 c: g, g. ^# j; F. P
center: {yes | no | 1 | 0 }:窗口是否居中,默认yes,但仍可以指定高度和宽度。! N/ L2 D8 T5 d, H& C x" E
help: {yes | no | 1 | 0 }:是否显示帮助按钮,默认yes。/ \$ q* d# A3 j8 \
resizable: {yes | no | 1 | 0 } [IE5+]:是否可被改变大小。默认no。1 l& L2 O. x' Y4 U
status: {yes | no | 1 | 0 } [IE5+]:是否显示状态栏。默认为yes[ Modeless]或no[Modal]。$ Z1 t6 p; s' W
scroll:{ yes | no | 1 | 0 | on | off }:指明对话框是否显示滚动条。默认为yes。 还有几个属性是用在HTA中的,在一般的网页中一般不使用。
% _; ?/ T' V2 l; E- m$ q dialogHide:{ yes | no | 1 | 0 | on | off }:在打印或者打印预览时对话框是否隐藏。默认为no。
6 G- n: _" X% ~% k! W edge:{ sunken | raised }:指明对话框的边框样式。默认为raised。
# y* A) J4 ^, g$ R. J( _ unadorned:{ yes | no | 1 | 0 | on | off }:默认为no。 传入参数:
3 y: a, H4 C4 p; o" o- @7 N d9 K 要想对话框传递参数,是通过vArguments来进行传递的。类型不限制,对于字符串类型,最大为4096个字符。也可以传递对象,例如: test1.htm# |3 `3 ]* R5 \1 w* H u( w* t
<script>
7 j) H/ w7 i& `/ z5 M9 Q var mxh1 = new Array("mxh","net_lover","孟子E章")
6 Y" L/ _1 r* x! T3 } var mxh2 = window.open("about:blank","window_mxh")
* X! h- X% a' F! z& f$ h // 向对话框传递数组
8 f( O8 L# r, V3 E$ X0 C window.showModalDialog("test2.htm",mxh1)
0 l+ v- T C/ N. @8 B$ { // 向对话框传递window对象3 P- ]8 r$ j1 t8 Y; X1 ?
window.showModalDialog("test3.htm",mxh2)7 o9 \* E" w4 J: g6 @' y+ c
</script>test2.htm1 e! x+ S& l" O( j- Q v5 W
<script>
' ~1 w! w# ~+ S+ [5 n* j var a = window.dialogArguments. w) s5 G, A v! ?
alert("您传递的参数为:" + a)3 t$ O" R; H7 c5 e' _6 c
</script>
& i- N, H, j4 J5 B/ }test3.htm* V/ n2 L" M3 _+ S1 ^* d4 H" h1 T
<script>
9 C+ ?8 t5 s: f8 o+ G& N( c! i var a = window.dialogArguments- I# Q9 h* B! l" s6 k0 J/ m
alert("您传递的参数为window对象,名称:" + a.name)2 h7 S7 n- b9 T, [
</script> 可以通过window.returnValue向打开对话框的窗口返回信息,当然也可以是对象。例如: test4.htm
- H# B. i( ^- ?<script>
, J- ]- C( w4 w! E+ e var a = window.showModalDialog("test5.htm")% V7 U0 m5 v# x9 ?, e3 j
for(i=0;i<a.length;i++) alert(a)5 O1 j3 o m" D& Z0 z
</script>test5.htm$ ]! C& N) Z/ ?# U ]5 I- w
<script>2 W- M0 b1 w3 v, F
function sendTo()
# P# y; u; k3 s: I" h6 O( j8 P {
t! S K+ u- { var a=new Array("a","b")
+ y B! B- R7 L( L w window.returnValue = a; V N7 i5 C; i
window.close()" B: O* g+ C8 x
}
5 K) x. _) W+ m8 N5 h </script>8 P' Y* }; Q% L& x/ j/ x0 W0 q
<body>
1 ~% L3 K3 z) P <form>
9 O' Q+ m" J: y <input value="返回" type=button onclick="sendTo()">
0 y- D" S, V" x </form> 常见问题:4 H4 a z A9 ]1 E$ D
1,如何在模态对话框中进行提交而不新开窗口?1 i6 B* T: I& ^" `/ ~
如果你 的 浏览器是IE5.5+,可以在对话框中使用带name属性的iframe,提交时可以制定target为该iframe的name。对于IE4+,你可以用高度为0的frame来作。例如: * R( \* N4 M* c% T5 ] ~; W/ n
|