Javascript彈出窗口總結

Javascript 彈出窗口總結

 

1: window.open

<!–

window.open('page.html', 'newwindow', 'height=100, width=400, top=0,left=0, toolbar=no, menubar=no, scrollbars=no, resizable=no,location=no, status=no')

//寫成一行

–>

參數解釋:

window.open 彈出新窗口的命令;

'page.html' 彈出窗口的文件名;

'newwindow' 彈出窗口的名字(不是文件名),非必須,可用空''代替;

height=100 窗口高度;

width=400 窗口寬度;

top=0 窗口距離屏幕上方的象素值;

left=0 窗口距離屏幕左側的象素值;

toolbar=no 是否顯示工具欄,yes為顯示;

menubar,scrollbars 表示菜單欄和滾動欄。

resizable=no 是否允許改變窗口大小,yes為允許;

location=no 是否顯示地址欄,yes為允許;

status=no 是否顯示狀態欄內的信息(通常是文件已經打開),yes為允許;

 

2: showModalDialog()、showModelessDialog()

(1) window.showModalDialog() 模態對話框

模態對話框始終有焦點(焦點不可移走,直到它關閉)。

 

(2) window.showModelessDialog() 非模態對話框

由於是對話框,因此它並沒有一般用window.open()打開的窗口的所有屬性。

不必用window.close()去關閉它,

當以非模態方式[IE5]打開時, 打開對話框的窗口仍可以進行其他的操作,

即對話框不總是最上面的焦點,當打開它的窗口URL改變時,它自動關閉。

 

(3) 使用方法如下:

vReturnValue = window.showModalDialog(sURL [, vArguments] [, sFeatures])

vReturnValue = window.showModelessDialog(sURL [, vArguments] [, sFeatures])

參數說明:

sURL

必選參數,類型:字符串。用來指定對話框要顯示的文檔的URL。

vArguments

可選參數,類型:變體。用來向對話框傳遞參數。傳遞的參數類型不限,包括數組等。

對話框通過window.dialogArguments 來獲取傳遞進來的參數, 通過window.returnValue 來進行回傳參數。

 

sFeatures

可選參數,類型:字符串。用來描述對話框的外觀等信息,可以使用以下的一個或幾個,用分號“;”隔開。

dialogHeight 對話框高度,不小於100px,IE4中dialogHeight 和dialogWidth 默認的單位是em,而IE5中是px,為方便其見,在定義modal方式的對話框時,用px做單位。

dialogWidth: 對話框寬度。

dialogLeft: 距離桌面左的距離。

dialogTop: 離桌面上的距離。

center: {yes | no | 1 | 0 }:窗口是否居中,默認yes,但仍可以指定高度和寬度。

help: {yes | no | 1 | 0 }:是否顯示幫助按鈕,默認yes。

resizable: {yes | no | 1 | 0 } [IE5+]:是否可被改變大小。默認no。

status: {yes | no | 1 | 0 } [IE5+]:是否顯示狀態欄。默認為yes[ Modeless]或no[Modal]。

scroll:{ yes | no | 1 | 0 | on | off }:指明對話框是否顯示滾動條。默認為yes。

 

  還有幾個屬性是用在HTA中的,在一般的網頁中一般不使用。

dialogHide:{ yes | no | 1 | 0 | on | off }:在打印或者打印預覽時對話框是否隱藏。默認為no。

edge:{ sunken | raised }:指明對話框的邊框樣式。默認為raised。

unadorned:{ yes | no | 1 | 0 | on | off }:默認為no。

 

3. 父窗口刷新問題

(1) 用window.open()打開的窗口

window.opener.location.reload();

 

(2) 用showModalDialog()打開的窗口

window.parent.dialogArguments.document.execCommand('Refresh');

 

下面是showModalDialog/showModelessDialog使用例子,父窗口向子窗口傳遞值,子窗口設置父窗口的值,子窗口關閉的時候返回值到父窗口.關閉刷新父窗口,希望對象我這樣的WEB開發的菜鳥有所幫助.

 

(一)showModalDialog使用例子,父窗口向子窗口傳遞值,子窗口設置父窗口的值,子窗口關閉的時候返回值到父窗口.

 

farther.html

—————————

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<HTML>

<HEAD>

<TITLE> New Document </TITLE>

<META NAME="Generator" CONTENT="EditPlus">

<META NAME="Author" CONTENT="">

<META NAME="Keywords" CONTENT="">

<META NAME="Description" CONTENT="">

<script language="javascript">

<!–

function openChild(){

 

var k = window.showModalDialog("child.html",window,"dialogWidth:335px;status:no;dialogHeight:300px");

if(k != null)

document.getElementById("txt11").value = k;

}

//–>

</script>

</HEAD>

 

<BODY>

<br>傳遞到父窗口的值:<input id="txt9" type="text" value="3333333333333"><br>

返回的值:<input id="txt11" type="text"><br>

子窗口設置的值:<input id="txt10" type="text"><br>

 

 

<input type ="button" value="openChild" onclick="openChild()">

</BODY>

</HTML>

—————————————————————

child.html

——–

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<HTML>

<HEAD>

<TITLE> New Document </TITLE>

<META NAME="Generator" CONTENT="EditPlus">

<META NAME="Author" CONTENT="">

<META NAME="Keywords" CONTENT="">

<META NAME="Description" CONTENT="">

<meta http-equiv="Expires" CONTENT="0">

<meta http-equiv="Cache-Control" CONTENT="no-cache">

<meta http-equiv="Pragma" CONTENT="no-cache">

 

</HEAD>

 

<BODY>

<br>父窗口傳遞來的值:<input id="txt0" type="text"><br>

輸入要設置父窗口的值:<input id="txt1" type="text"><input type ="button" value="設置父窗口的值" onclick="setFather()"><br>

輸入返回的值:<input id="txt2" type="text"><input type ="button" value="關閉切返回值" onclick="retrunValue()">

<input type ="button" value="關閉刷新父窗口" onclick="">

 

</BODY>

</HTML>

 

<script language=javascript>

<!–

var k=window.dialogArguments;

//獲得父窗口傳遞來的值

if(k!=null)

{

document.getElementById("txt0").value = k.document.getElementById("txt9").value;

}

//設置父窗口的值

function setFather()

{

k.document.getElementById("txt10").value = document.getElementById("txt1").value

}

//設置返回到父窗口的值

function retrunValue()

{

var s = document.getElementById("txt2").value;

window.returnValue=s;

window.close();

}

//–>

</script>

 

—————————-

說明:

由於showModalDialog緩存嚴重,下面是在子窗口取消客戶端緩存的設置.也可以在服務器端取消緩存,參考:

https://adandelion.cnblogs.com/articles/252137.html

<meta http-equiv="Expires" CONTENT="0">

<meta http-equiv="Cache-Control" CONTENT="no-cache">

<meta http-equiv="Pragma" CONTENT="no-cache">

————————————————————————————————————————

(二)下面是關閉刷新父窗口的例子

 

farther.html

—————————

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<HTML>

<HEAD>

<TITLE> New Document </TITLE>

<META NAME="Generator" CONTENT="EditPlus">

<META NAME="Author" CONTENT="">

<META NAME="Keywords" CONTENT="">

<META NAME="Description" CONTENT="">

<script language="javascript">

<!–

function openChild()

{

 

var k = window.showModalDialog("child.html",window,"dialogWidth:335px;status:no;dialogHeight:300px");

if(k == 1)//判斷是否刷新

{

  alert('刷新');

  window.location.reload();

}

}

//–>

</script>

</HEAD>

 

<BODY>

<br>傳遞到父窗口的值:<input id="txt9" type="text" value="3333333333333"><br>

<input type ="button" value="openChild" onclick="openChild()">

</BODY>

</HTML>

—————————————————-

child.html

——–

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<HTML>

<HEAD>

<TITLE> New Document </TITLE>

<META NAME="Generator" CONTENT="EditPlus">

<META NAME="Author" CONTENT="">

<META NAME="Keywords" CONTENT="">

<META NAME="Description" CONTENT="">

<meta http-equiv="Expires" CONTENT="0">

<meta http-equiv="Cache-Control" CONTENT="no-cache">

<meta http-equiv="Pragma" CONTENT="no-cache">

 

</HEAD>

 

<BODY>

<br>父窗口傳遞來的值:<input id="txt0" type="text"><br>

 

<input type ="button" value="關閉刷新父窗口" onclick="winClose(1)">

<input type ="button" value="關閉不刷新父窗口" onclick="winClose(0)">

 

</BODY>

</HTML>

 

<script language=javascript>

<!–

var k=window.dialogArguments;

//獲得父窗口傳遞來的值

if(k!=null)

{

document.getElementById("txt0").value = k.document.getElementById("txt9").value;

}

 

//關閉窗口返回是否刷新的參數.

function winClose(isRefrash)

{

 

window.returnValue=isRefrash;

window.close();

}

//–>

</script>

 

————————–

說明

1.下面是取消客戶端緩存的:

<meta http-equiv="Expires" CONTENT="0">

<meta http-equiv="Cache-Control" CONTENT="no-cache">

<meta http-equiv="Pragma" CONTENT="no-cache">

也可以在服務器端取消緩存,參考:

https://adandelion.cnblogs.com/articles/252137.html

 

2.向父窗口傳遞闡述在ASP.NET中也可以是用aaa.aspx?id=1的方式傳遞.

 

3.不刷新父窗口的話在父窗口中直接這樣一來設置可以.

<script>

window.showModalDialog("child.html",window,"dialogWidth:335px;status:no;dialogHeight:300px");

</script>

4.在子窗口中若要提交頁面的話要加入:,這樣就不會打開新窗口瞭.

<head>

<base target="_self">

</HEAD>

 

showModalDialog()、showModelessDialog()方法使用詳解

 

Javascript有許多內建的方法來產生對話框,如:window.alert(), window.confirm(),window.prompt().等。 然而IE提供更多的方法支持對話框。如:

 

  showModalDialog() (IE 4+ 支持)

  showModelessDialog() (IE 5+ 支持)

 

 

window.showModalDialog()方法用來創建一個顯示HTML內容的模態對話框,由於是對話框,因此它並沒有一般用window.open()打開的窗口的所有屬性。

window.showModelessDialog()方法用來創建一個顯示HTML內容的非模態對話框。

 

當我們用showModelessDialog()打開窗口時,不必用window.close()去關閉它,當以非模態方式[IE5]打開時, 打開對話框的窗口仍可以進行其他的操作,即對話框不總是最上面的焦點,當打開它的窗口URL改變時,它自動關閉。而模態[IE4]方式的對話框始終有焦點(焦點不可移走,直到它關閉)。模態對話框和打開它的窗口相聯系,因此我們打開另外的窗口時,他們的鏈接關系依然保存,並且隱藏在活動窗口的下面。

 

使用方法如下:

vReturnValue = window.showModalDialog(sURL [, vArguments] [, sFeatures])

vReturnValue = window.showModelessDialog(sURL [, vArguments] [, sFeatures])

參數說明:

sURL

必選參數,類型:字符串。用來指定對話框要顯示的文檔的URL。

vArguments

可選參數,類型:變體。用來向對話框傳遞參數。傳遞的參數類型不限,包括數組等。對話框通過window.dialogArguments來取得傳遞進來的參數。

sFeatures

可選參數,類型:字符串。用來描述對話框的外觀等信息,可以使用以下的一個或幾個,用分號“;”隔開。

  dialogHeight 對話框高度,不小於100px,IE4中dialogHeight 和dialogWidth 默認的單位是em,而IE5中是px,為方便其見,在定義modal方式的對話框時,用px做單位。

  dialogWidth: 對話框寬度。

  dialogLeft: 距離桌面左的距離。

  dialogTop: 離桌面上的距離。

  center: {yes | no | 1 | 0 }:窗口是否居中,默認yes,但仍可以指定高度和寬度。

  help: {yes | no | 1 | 0 }:是否顯示幫助按鈕,默認yes。

  resizable: {yes | no | 1 | 0 } [IE5+]:是否可被改變大小。默認no。

  status: {yes | no | 1 | 0 } [IE5+]:是否顯示狀態欄。默認為yes[ Modeless]或no[Modal]。

  scroll:{ yes | no | 1 | 0 | on | off }:指明對話框是否顯示滾動條。默認為yes。

 

  還有幾個屬性是用在HTA中的,在一般的網頁中一般不使用。

  dialogHide:{ yes | no | 1 | 0 | on | off }:在打印或者打印預覽時對話框是否隱藏。默認為no。

  edge:{ sunken | raised }:指明對話框的邊框樣式。默認為raised。

  unadorned:{ yes | no | 1 | 0 | on | off }:默認為no。

 

傳入參數:

要想對話框傳遞參數,是通過vArguments來進行傳遞的。類型不限制,對於字符串類型,最大為4096個字符。也可以傳遞對象,例如:

 

test1.htm

====================

<script>

  var mxh1 = new Array("mxh","net_lover","孟子E章")

  var mxh2 = window.open("about:blank","window_mxh")

  // 向對話框傳遞數組

  window.showModalDialog("test2.htm",mxh1)

  // 向對話框傳遞window對象

  window.showModalDialog("test3.htm",mxh2)

</script>

 

test2.htm

====================

<script>

  var a = window.dialogArguments

  alert("您傳遞的參數為:" + a)

</script>

 

test3.htm

====================

<script>

  var a = window.dialogArguments

  alert("您傳遞的參數為window對象,名稱:" + a.name)

</script>

 

可以通過window.returnValue向打開對話框的窗口返回信息,當然也可以是對象。例如:

 

test4.htm

===================

<script>

  var a = window.showModalDialog("test5.htm")

  for(i=0;i<a.length;i++) alert(a[i])

</script>

 

test5.htm

===================

<script>

function sendTo()

{

  var a=new Array("a","b")

  window.returnValue = a

  window.close()

}

</script>

<body>

<form>

  <input value="返回" type=button onclick="sendTo()">

</form>

 

常見問題:

1,如何在模態對話框中進行提交而不新開窗口?

如果你 的 瀏覽器是IE5.5+,可以在對話框中使用帶name屬性的iframe,提交時可以制定target為該iframe的name。對於IE4+,你可以用高度為0的frame來作:例子,

 

test6.htm

===================

<script>

  window.showModalDialog("test7.htm")

</script>

 

test7.htm

===================

if(window.location.search) alert(window.location.search)

<frameset rows="0,*">

  <frame src="about:blank">

  <frame src="test8.htm">

</frameset>

 

test8.htm

===================

<form target="_self" method="get">

<input name=txt value="test">

<input type=submit>

</form>

<script>

if(window.location.search) alert(window.location.search)

</script>

2,可以通過https://servername/virtualdirname/test.htm?name=mxh方式直接向對話框傳遞參數嗎?

答案是不能。但在frame裡是可以的。

 

 

 

 

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

下面是自己做的例子:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

<%@ page language="java" contentType="text/html"

    pageEncoding="utf-8"%>

<html>

<head>

<title>Insert title here</title>

</head>

<script type="text/javascript">

 function p1(){

 

 window.open("images/1.gif","jack","26")

 

 }

</script>

<script type="text/javascript">

 function p2(){

window.open ("images/1.gif","newwindow","height=100,width=100")

 }

</script>

 

<script type="text/javascript">

 function p3(){

window.showModalDialog("images/1.gif");

 

 }

</script>

<body>

<center>

       <form action="">

 

       <input type="submit" value="提交1" onclick="p1();"><br>

       <input type="submit" value="提交2" onclick="p2();"><br>

       <input type="submit" value="提交3" onclick="p3();">

       </form>

</center>

</body>

</html>

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *