Javascript裡面分模式對話框和非模式對話框,其實兩者差異就是在對話框關閉之前使用者能否在同一頁的其他地方進行工作。例如「開啟檔案」對話框就是典型的模式對話框,在你對這個對話框做出動作才能對開啟該對話框的程式進行其他操作,而非模式對話框則不必。
模式對話框:showModalDialog
非模式對話框:showModelessDialog
vReturnValue = window.showModalDialog(sURL [, vArguments] [,sFeatures])
vReturnValue = window.showModelessDialog(sURL [, vArguments] [,sFeatures])
回傳值:vReturnValue,由對話框回傳當然就是回傳值了;
sURL:必選,為你要開啟的頁面;
vArguments--
可選參數,類型:變體。用來向對話框傳遞參數。傳遞的參數類型不限,包括陣列等。對話框透過window.dialogArguments來取得傳遞進來的參數。
sFeatures--
可選參數,類型:字串。用來描述對話框的外觀等訊息,可以使用以下的一個或幾個,用分號「;」隔開。
1.dialogHeight :對話框高度,不小於100px,IE4中dialogHeight 和 dialogWidth 預設的單位是em,而IE5中是px,為方便其見,在定義modal方式的對話框時,用px做單位。
2.dialogWidth: 對話框寬度。
3.dialogLeft: 離螢幕左的距離。
4.dialogTop: 離螢幕上的距離。
5.center: {yes | no | 1 | 0 }:視窗是否為居中,預設yes,但仍可指定高度和寬度。
6.help: {yes | no | 1 | 0 }:是否顯示幫助按鈕,預設yes。
7.resizable: {yes | no | 1 | 0 } [IE5+]:是否可被改變大小。預設no。
8.status: {yes | no | 1 | 0 } [IE5 ]:是否顯示狀態列。預設為yes[ Modeless]或no[Modal]。
9.scroll:{ yes | no | 1 | 0 | on | off }:指明對話框是否顯示捲軸。預設為yes。
以下幾個屬性是用在HTA的,在一般的網頁中一般不使用。
10.dialogHide:{ yes | no | 1 | 0 | on | off }:在列印或列印預覽時對話方塊是否隱藏。預設為no。
11.edge:{ sunken | raised }:指明對話框的邊框樣式。預設為raised。
12.unadorned:{ yes | no | 1 | 0 | on | off }:預設為no。
參數傳遞:
1.要對話框傳遞參數,是透過vArguments來進行傳遞的。類型不限制,對於字串類型,最大為4096個字元。也可以傳遞對象,例如:
-------------------------------
parent.htm
<script> var obj = new Object(); obj.name="51js"; window.showModalDialog("modal.htm",obj,"dialogWidth=200px;dialogHeight=100px"); </script>
modal.htm
<script> var obj = window.dialogArguments alert("您传递的参数为:" + obj.name) </script>
-------------------------------
2.可以透過window.returnValue向開啟對話框的視窗回傳訊息,當然也可以是物件。例如:
------------------------------
parent.htm
<script> str =window.showModalDialog("modal.htm",,"dialogWidth=200px;dialogHeight=100px"); alert(str); </script>
modal.htm
<script> window.returnValue="http://www.51js.com"; </script>
用window.showModalDialog 或window.showModelessDialog開啟一個模式視窗後,和父視窗的一些互動問題。
要進行互動操作的前提,在呼叫showModalDialog或是showModelessDialog方法的時候,第二個參數傳window,如:
window.showModelessDialog('filename.htm',window,'dialogWidth=200px;dialogHeight=250px;')
接下來,就是要取得父視窗的一些資料和方法,這是常用的,父視窗取子視窗的參數一般透過returnValue就可以搞定了
//取得父窗口的JS变量 var window.dialogArguments.var; //获得父窗口的对象和属性 window.dialogArguments.form1.name.value ; //调用父窗口的方法 fun window.dialogArguments.fun() ;