首頁  >  文章  >  web前端  >  window.showModalDialog()回傳值的學習心得總結_javascript技巧

window.showModalDialog()回傳值的學習心得總結_javascript技巧

WBOY
WBOY原創
2016-05-16 17:04:571042瀏覽

下面先說說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個字元。也可以傳遞對象,例如:

複製程式碼 程式碼如下:

<script><script>< >var obj = new Object();<BR>obj.name="ttop";<BR>window.showModalDialog("test.htm",obj,"dialogWidth=200px;dialogHeight=100px");<BR>< /script><BR>test.htm<BR><script><BR>var obj = window.dialogArguments<BR>alert("您傳遞的參數為:" obj.name)<BR></script>

2.可以透過window.returnValue向開啟對話方塊的視窗傳回訊息,當然也可以是物件。例如:

複製程式碼 程式碼如下:
<script><window. showModalDialog("test.htm",,"dialogWidth=200px;dialogHeight=100px");<BR>alert(str);<BR></script>
test.htm
<script><BR></script>
test.htm
<script><BR> window.returnValue="/";<BR></script>

一、showModalDialog和showModelessDialog有什麼不同?

showModalDialog:被開啟後就會永遠保持輸入焦點。除非對話方塊關閉,否則使用者無法切換到主視窗。類似alert的運作效果。

showModelessDialog:開啟後,使用者可以隨機切換輸入焦點。對主視窗沒有任何影響(最多是被擋住一下而以。:P)

二、怎樣才讓在showModalDialog和showModelessDialog的超連線不彈出新視窗?

在被開啟的網頁裡加上就可以了。這句話一般是放在和

之間的。

三、怎樣才刷新showModalDialog和showModelessDialog裡的內容?

在showModalDialog和showModelessDialog裡是不能按F5刷新的,又不能彈出選單。這個只能靠javascript了,以下是相關程式碼:


將filename.htm替換成網頁的名字然後將它放到你打開的網頁裡,按F5就可以刷新了,注意,這個要配合使用,不然你按F5會彈出新視窗的。

四、如何用javascript關掉showModalDialog(或showModelessDialog)開啟的視窗。

也要配合,不然會開啟一個新的IE窗口,然後再關掉的。

五、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 ="值或變數";

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn