2008年11月5日 星期三

在Web環境下快速彈出新視窗

傳統彈出新視窗的作法
都是用Javascript的window.open()method
但是它反應時間還蠻慢的
其實如果客戶的標準瀏覽器是IE
我們可以改用window.showModalDialog() or window.showModelessDialog()
兩個function的差別是showModalDialog() 彈出的視窗沒關掉前不能操作主畫面(類似對話框alert)

語法:
vReturnValue = window.showModalDialog(sURL [, vArguments] [, sFeatures])
(1)vReturnValue: 子視窗的傳回值
(2)sURL: 子視窗的URL (必要項)
(3)vArguments: 傳入子視窗的參數(非必要)
(4)sFeatures: 視窗外觀屬性(字串型別)

舉個例子:
在主畫面TextBox填入值,按下送出按鈕把值傳到彈出的子畫面的TextBox中,同樣的,在子畫面也可以傳回值給主畫面。

主畫面的script:

function OpenNewWindow() {
var returnObj
var passingValue=document.getElementById('PareText1').value;

//開啟子畫面傳入本身視窗
returnObj=window.showModalDialog("PopWindow.aspx",self,'dialogHeight:100px;');
//讀取子畫面的回傳並填入母畫面
document.getElementById('PareText2').value=returnObj.returnValue;
}

子畫面的Script:

//來自母畫面的參數
var Parent=window.dialogArguments;
//要回傳的參數
var returnObj=Object();

//讀取母畫面的參數並塞值
document.getElementById('ChilText1').value=Parent.document.getElementById('PareText1').value;

function ReturnToParent() {
//把值腮入欲傳回的Object
//把Object傳回母畫面
returnObj.returnValue=document.getElementById('ChilText2').value;
window.returnValue=returnObj;
window.close();
}

說明:
1. window.dialogArguments是當呼叫showModalDialog()有傳入參數時才有值..(即"self")
2. var returnObj=Object();是Javascript宣告物件的語法,宣告之後就可以指定屬性值
如:returnObj.returnValue=document.getElementById('ChilText2').value;
3. window.returnValue就是指定showModalDialog()的傳回值

沒有留言: