下面先說說window.showModalDialog的基本用法
showModalDialog() (IE 4 支援)
showModelessDialog() (IE 5 支援)
window.showModalDialog()方法用來建立一個顯示HTML內容的模態對話框。
window.showModelessDialog()方法用來建立一個顯示HTML內容的非模態對話框。
使用方法:
vReturnValue = window.showModalDialog(sURL [, vArguments] [,sFeatures])
vReturnValue = window.showModelessDialog(sURL [, vArments]
參數說明:
sURL--必選參數,類型:字串。用來指定對話方塊要顯示的文件的URL。
vArguments--可選參數,類型:變體。用來向對話框傳遞參數。傳遞的參數類型不限,包括陣列等。對話框透過window.dialogArguments來取得傳遞進來的參數。
sFeatures--可選參數,類型:字串。用來描述對話框的外觀等訊息,可以使用以下的一個或幾個,用分號「;」隔開。
1.dialogHeight :對話框高度,不小於100px,IE4中dialogHeight 和dialogWidth 預設的單位是modem,而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個字元。也可以傳遞對象,例如:
showModalDialog:被開啟後就會永遠保持輸入焦點。除非對話方塊關閉,否則使用者無法切換到主視窗。類似alert的運作效果。
showModelessDialog:開啟後,使用者可以隨機切換輸入焦點。對主視窗沒有任何影響(最多是被擋住一下而以。:P)
二、怎樣才讓在showModalDialog和showModelessDialog的超連線不彈出新視窗?
在被開啟的網頁裡加上
三、怎樣才刷新showModalDialog和showModelessDialog裡的內容?
在showModalDialog和showModelessDialog裡是不能按F5刷新的,又不能彈出選單。這個只能靠javascript了,以下是相關程式碼:
將filename.htm替換成網頁的名字然後將它放到你打開的網頁裡,按F5就可以刷新了,注意,這個要配合
四、如何用javascript關掉showModalDialog(或showModelessDialog)開啟的視窗。
也要配合
五、showModalDialog和showModelessDialog資料傳遞技巧。
(作者語:本來想用一問一答形式來寫的,但是我想不出這個怎麼問,所以只好這樣了。)
這個東西比較麻煩,我改了好幾次了不是沒辦法說明白(語文水平越來越差了),只好用個例子說明了。
範例:現在需要在一個showModalDialog(或showModelessDialog)裡讀取或設定一個變數var_name
一般的傳遞方式:
window.showModalDialog("filename.htm",var_name)
//傳遞var_name變數
showModalDialog(或showModelessDialog)讀取和設定時:
alert(window.dialogArguments)//讀取var_name變數
window.dialogArguments="oyiboy"//設定var_name變數
這種方式是可以滿足的,但是當你想在操作var_name同時再操作第二個變理var_id時呢?就無法再進行操作了。這就是這種傳遞方式的限制。
以下是我建議使用的傳遞方式:
window.showModalDialog("filename.htm",window)
//不管要操作什麼變量,只傳遞什麼變數,只傳遞直傳遞主視窗的window物件
在showModalDialog(或showModelessDialog)讀取與設定時:
alert(window.dialogArguments.var_name)//讀取var_name變數
window.dialogArguments.var_name="oyiboy"/ /設定var_name變數
同時我也可以操作var_id變數
alert(window.dialogArguments.var_id)//讀取var_id變數
window.dialogArguments.var_id="001"//設定var_id變數
同樣也可以對主視窗的任何物件進行操作,如form物件裡的元素。
window.dialogArguments.form1.index1.value="這是在設定index1元素的值"
在父頁用onClick=""var reVal = window.showModalDialog('changephoto.htm','dialogWidth:500px;dialogHeight:300px;help:no'px;help:no'px;help:no'px;help:no'px;help:no'px;help:no'px;help:no'px; );if (typeof(reVal) != 'undefined') {form.textname.value=reVal;}"" cursor:hand "">點這裡修改圖片
在字視窗'changephoto.htm'中開啟一個框架集,框架集中包含一個asp文件,先將asp的值回傳到changephoto.htm中 再將這個值傳回主頁
changephoto.htm:
function onClose() { window.returnValue = form1.save.value;//也可以window.returnValue改成window.dialogArguments.oblogform.blogimage.value window.close(); }
asp檔:parent.document.form1.save.value ="值或變數";