javascript window.opener的用法分析

來源:互聯網
上載者:User

window.opener 的用法
window.opener 返回的是建立當前視窗的那個視窗的引用,比如點擊了a.htm上的一個連結而開啟了b.htm,然後我們打算在b.htm上輸入一個值然後賦予a.htm上的一個id為“name”的textbox中,就可以寫為:

window.opener.document.getElementById("name").value = "輸入的資料";

對於javascript中的window.opener沒有很好的理解。
為什麼架構中不能使用,快顯視窗的父視窗不能在架構裡面的某個頁面呢?那怎樣通過快顯視窗操作架構中的父視窗呢?

opener.parent.frames['frameName'].document.all.input1.value 試試這個:)
不過說到window.opener就不能不說open,這兩個結合起來才可能一起使用。
window.open()支援環境: JavaScript1.0+/JScript1.0+/Nav2+/IE3+/Opera3+

基本文法:
window.open(pageURL,name,parameters)
其中:
pageURL 為子視窗路徑
name 為子視窗控制代碼
parameters 為視窗參數(各參數用逗號分隔)

樣本:

<SCRIPT>
<!--
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')
//寫成一行
-->
</SCRIPT>
指令碼運行後,page.html將在新表單newwindow中開啟,寬為100,高為400,距屏頂0象素,屏左0象素,無工具條,無菜單條,無捲軸,不可調整大小,無地址欄,無狀態欄。
上例中涉及的為常用的幾個參數,除此以外還有很多其他參數,如下所示:
各項參數
其中yes/no也可使用1/0;pixel value為具體的數值,單位象素。
參數 | 取值範圍 | 說明
alwaysLowered | yes/no | 指定視窗隱藏在所有視窗之後
alwaysRaised | yes/no | 指定視窗懸浮在所有視窗之上
depended | yes/no | 是否和父視窗同時關閉
directories | yes/no | Nav2和3的目錄欄是否可見
height | pixel value | 視窗高度
hotkeys | yes/no | 在沒功能表列的視窗中設安全退出熱鍵
innerHeight | pixel value | 視窗中文檔的像素高度
innerWidth | pixel value | 視窗中文檔的像素寬度
location | yes/no | 位置欄是否可見
menubar | yes/no | 功能表列是否可見
outerHeight | pixel value | 設定視窗(包括裝飾邊框)的像素高度
outerWidth | pixel value | 設定視窗(包括裝飾邊框)的像素寬度
resizable | yes/no | 視窗大小是否可調整
screenX | pixel value | 視窗距螢幕左邊界的像素長度
screenY | pixel value | 視窗距螢幕上邊界的像素長度
scrollbars | yes/no | 視窗是否可有滾動欄
titlebar | yes/no | 視窗題目欄是否可見
toolbar | yes/no | 視窗工具列是否可見
Width | pixel value | 視窗的像素寬度
z-look | yes/no | 視窗被啟用後是否浮在其它視窗之上

用函數控制快顯視窗
下面是一個完整的代碼。
<html>
<head>
<script LANGUAGE="JavaScript">
function openwin() {
window.open ("page.html", "newwindow", "height=100, width=400, toolbar =no, menubar=no, scrollbars=no, resizable=no, location=no, status=no") //寫成一行
}
</script>
</head>
<body onload="openwin()">
任意的頁面內容...
</body>
</html>
這裡定義了一個函數openwin(),函數內容就是開啟一個視窗。怎麼調用呢?
方法一:
<body onload="openwin()">
瀏覽器讀頁面時快顯視窗;
方法二:
<body onunload="openwin()">
瀏覽器離開頁面時快顯視窗;
方法三:
用一個串連調用:
<a href="#" onclick="openwin()">開啟一個視窗</a>
注意:使用的“#”是虛串連。
方法四:
用一個按鈕調用:
<input type="button" onclick="openwin()" value="開啟視窗">
如何?在不使用window.showModalDialog 的情況下用 window.open方式 向父視窗傳回值。
例如: 頁面AAA.htm 用 window.open方式彈出頁面 BBB.htm 。
在頁面BBB.htm上選擇一個值,確定關閉視窗後將選擇的這個值返回到父視窗AAA.htm。
AAA.htm得到返回的值後,給本頁面上的文字框賦值。

BBB.htm頁面中加入下面代碼:
window.opener.document.getElementById("theTextAreaId").value = document.getElemnetById("theSelectId").value ;

window.opener 的用法
window.opener 返回的是建立當前視窗的那個父視窗的引用,比如點擊了a.htm上的一個連結而開啟了b.htm,然後我們打算在b.htm上輸入一個值然後賦予a.htm上的一個id為“name”的textbox中,就可以寫為:

window.opener.document.getElementById("name").value = "輸入的資料";
對於javascript中的window.opener沒有很好的理解。
為什麼架構中不能使用,快顯視窗的父視窗不能在架構裡面的某個頁面呢?那怎樣通過快顯視窗操作架構中的父視窗呢?
opener.parent.frames['frameName'].document.all.input1.value
即opener這個對象為前一個視窗,可以使用window.opener.document...調用document的相關方法,例如下面的例子,插入一些table行到前一個視窗:
function taletoTb(itemStr) {
newRow = opener.document.all.itemTb.insertRow(opener.document.all.itemTb.rows.length);
rowCnt = opener.document.all.itemTb.rows.length;
newCell = newRow.insertCell();
newCell.insertAdjacentHTML('BeforeEnd','<div align="center">'+itemCode+'</div>');
newCell = newRow.insertCell();
newCell.insertAdjacentHTML('BeforeEnd','<div align="center">'+itemName+'</div>');
newCell = newRow.insertCell();
newCell.insertAdjacentHTML('BeforeEnd','<div align="center"><img src="../../../images/delete2.gif" width="12" height="12" onClick="userRightDel(this);"><input type="hidden" name="itembox" value='+itemCode+'></div>');
} 11:56 瀏覽 (159) 評論 (0) 分類: JavaScript 2008-02-27
縮減顯示confirm用法和例子
一般用於彈出對話方塊(確定/否)
確定:就執行其嵌套的內容;否:則反之

<script language="javascript">
//驗證時間格式 YYYY-MM-DD/YYYY,MM,DD
function isDate(date){
var regu = "^[0-9]{4}-([0-1]?)[0-9]{1}-([0-3]?)[0-9]{1}$";
var re = new RegExp(regu);
if (date.search(re) != -1)
return true;
else
return false;
}
function sureButton(){
if(!confirm('真的要刪除嗎?刪除後將無法恢複!')){
return;
}
//驗證時間格式 YYYY-MM-DD
var startDate=document.getElementById("startDate").value;
var endDate=document.getElementById("endDate").value;
if(!isDate(startDate)){
alert(startDate+"請輸入正確的開始日期格式!如:(YYYY-MM-DD)2008-01-01");
return document.getElementById("startDate").focus();
}
if(!isDate(endDate)){
alert("請輸入正確的結束日期格式!如:(YYYY-MM-DD)2008-01-01");
return document.getElementById("endDate").focus();
}
if(startDate==""){
alert("請輸入開始日期");
return document.getElementById("startDate").focus();
}
if(endDate==""){
alert("請輸入結束日期");
return document.getElementById("endDate").focus();
}
startDate=startDate.replace(new RegExp('-', 'g'),'/');
alert(startDate);
endDate=endDate.replace(new RegExp('-', 'g'),'/');
var startTime=new Date(startDate).getTime();
alert(new Date(startDate).getTime());
var endTime=new Date(endDate).getTime();
if((endTime-startTime)<0){
alert("結束日期必須大於開始日期");
return document.getElementById("endDate").focus();
}

}
</script>

<html>
<head>
<meta http-equiv="Content-Language" content="zh-cn">
<meta name="generator" content="Bluefish 1.0.7">
<meta name="ProgId" content="FrontPage.Editor.Document">
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title></title>
<style type="text/css">
table{color: #000000; font-family: 宋體; font-size: 12px; height:12 }
t1{color:#008000;align:center}
</style>
</head>
<body topmargin="0" leftmargin="0">
<div align="left">
<table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="461" height="8" id="AutoNumber1" background="images/kabg.gif">
<tr>
<td colspan="3">
<table cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%" height="17">
<tr>
<td width="19%" height="25" align="center" style="border:1px solid #000080;"><font color="#008000">開始日期</font></td>
<td width="31%" style="border:1px solid #000080;">
<input name="startDate" type="text" id="startDate" size="15"></td>
<td width="22%" align="center" style="border:1px solid #000080;"><font color="#008000">結束日期</font></td>
<td width="28%" style="border:1px solid #000080;">
<input name="endDate" type="text" id="endDate" size="15"></td>
</tr>
</table>
</td>
</tr>
<tr>
<td height="28" align="center" style="border:1px solid #000080; " colspan="3">
<table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%" id="AutoNumber3" height="17">
<tr>
<td width="14%" align="center" height="25">
<font color="#008000">目前狀態</font></td>
<td width="18%" align="center" height="25">
<select size="1" name="display">
<option value="0">無效</option>
<option value="1">等待</option>
<option value="2" selected>顯示中</option>
</select></td>
<td width="15%" align="center" height="25" style="border-left: 1px solid #000080; border-right-width: 1; border-top-width: 1; border-bottom-width: 1">
<font color="#008000">Logo行寬</font></td>
<td width="10%" align="center" height="25">
<select size="1" name="colValue">
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option>5</option>
<option>6</option>
</select></td>
<td width="12%" align="center" style="border-left: 1px solid #000080; border-right-width: 1; border-top-width: 1; border-bottom-width: 1"><font color="#008000">顯示順序</font></td>
<td width="5%" >
<input name="displayOrder" type="text" id="displayOrder" size="3" value="1">
</td>
<td width="43%" align="center" height="25" style="border-left-style: solid; border-left-width: 1; border-right-width: 1; border-top-width: 1; border-bottom-width: 1">
<input onclick="cancelButton()" type="reset" value="關閉" name="B2" style="border-style: outset; border-width: 1; color:#0000FF">
<input onclick="sureButton()" type="submit" value="確定" name="B1" style="border-style: outset; border-width: 1; color:#0000FF"></td>
</tr>
</table>
</td>
</tr>
<tr>
<td height="20" colspan="3" align="center" style="border:1px solid #000080; ">
<marquee behavior="slide" style="color: #808080">::日期格式為年-月-日,直接填入圖片和點擊路徑全名時應仔細查對是否正確::</marquee></td>
</tr>
</table>
</div>
</body>
</html>
可以大量刪除表格記錄行,通過checkbox選擇刪除的行;可以批量增加記錄行,通過輸入框指定行數。

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=shift-js">
<title>The page of append rows to Table</title>

<script language="JavaScript">
// 新增行
function addRow(){
var textNum = document.getElementById("rownum");
// 得到新增行記錄的行數
var index = textNum.value;
if(!checknum(index)){
alert("You can only input number in the TEXT!");
textNum.focus();
textNum.select();
}
for(var i = 0; i < index; i++){
// 得到表格對象
var tableObj = document.getElementById("mainTb");
// 得到tbody對象
var tableBodyObj = document.getElementById("mainBody");
var newRowObj = document.createElement("tr");
var newCheckBox = document.createElement("td");
var newtext1 = document.createElement("td");
var newtext2 = document.createElement("td");
var newtext3 = document.createElement("td");
newCheckBox.innerHTML = '<center><input type="Checkbox" name="checkbox" onclick = "checkBoxSel()"></center>';
newtext1.innerHTML = '<input type="text" name="newCarName" size="9">';
newtext2.innerHTML = '<input type="text" name="newCarName" size="9">';
newtext3.innerHTML = '<input type="text" name="newCarName" size="9">';
// 新增的tr節點下增加td節點
newRowObj.appendChild(newCheckBox);
newRowObj.appendChild(newtext1);
newRowObj.appendChild(newtext2);
newRowObj.appendChild(newtext3);
// tbody節點下增加tr節點
tableBodyObj.appendChild(newRowObj);
}
}
// 新增行數選擇框檢查輸入必須是數字
function checknum(strVal){
if (strVal.length != 0){
var r = strVal.match(new RegExp(/^[0-9]+$/));
if (r == null){
return false;
}else{
return true;
}
}
return true;
}
// 大量刪除指定的行
function deleteRow(){
var Tblen;
// 得到所有 checkbox 對象
var checkbox = document.getElementsByName("checkbox");
//var checkboxlen = document.all.checkbox.length;
// 得到所有提交的checkbox個數
var checkboxlen = checkbox.length;
var ischecked;
// 得到刪除按鈕對象
var delbutton = document.getElementById("delete");
for (var i=0; i < checkboxlen; i++){
// 得到表格行數
Tblen = this.mainTb.rows.length;
// 最終保留一行記錄
if (Tblen == 1)
{
document.getElementsByName("checkbox")[0].checked = false;
alert("A line have to be saved in the ID of mainTb!");
// 刪除按鈕不可用
delbutton.disabled = true;
return false;
}
ischecked = checkbox[i].checked;
// 如果當前的checkbox選中:刪除當前節點,由於刪除節點後,下面的節點上移,遊標(記錄行指標)也應該上移
if (ischecked)
{
// document.all("mainTb").deleteRow(i);
document.getElementById("mainTb").deleteRow(i);
// 遊標(記錄行指標)上移
i--;
}
// 重新統計checkbox個數
checkboxlen = checkbox.length;
}
// 刪除操作後按鈕狀態是不可用
delbutton.disabled = true;
}
// checkbox按鈕單擊事件處理函數:是否至少選中一行記錄,是可以刪除操作;如果沒有選擇,刪除按鈕不可用
function checkBoxSel(){
// 得到刪除按鈕對象
var delbutton = document.getElementById("delete");
if(checkselect()){
delbutton.disabled = false;
}else{
delbutton.disabled = true;
}
}
function checkselect(){
// 得到所有 checkbox 對象
var checkbox = document.getElementsByName("checkbox");
// 得到所有提交的checkbox個數
var chklength = checkbox.length;
var flag = false;
for(var i = 0; i < chklength; i++)
{
if(checkbox[i].checked == true)
{
flag = true;
break;
}
}
if(flag == true)
{
return true;
} else {
return false;
}
}
// 頁面載入body內容時執行
function loadpage(){
var delbutton = document.getElementById("delete");
var rownum = document.getElementById("rownum");
// 初始“刪除”按鈕不可用
delbutton.disabled = true;
// 初始行數輸入框內容為空白
rownum.value = "";
}
</script>
動態添加、刪除行,分別通過insertRow,deleteRow方法實現,顯示行號,通過rowIndex屬性獲得,基本可以動態實現相關功能。

<Script Language="Javascript">
var cGetRow=-99999;
var lineNo = 1;
function _(id) {
return document.getElementById(id);
}
// The index of the row to be deleted.
// This index starts from 0 and is relative to the logical order (not document order)
// of all the rows contained inside the table.
// If the index is -1 the last row in the table is deleted.
function AddRow(){
//添加一行
var newTr = _("tab1").insertRow();
//添加兩列
var newTd0 = newTr.insertCell();
var newTd1 = newTr.insertCell();
//設定列內容和屬性
newTd0.innerHTML = '<input type=checkbox id="box' + lineNo + '" onClick="GetRow()">';
// 測試動態改變innerHTML中的checkbox的id
alert(_("box" + lineNo).id);
newTd1.innerText= '新增加行' + lineNo;
lineNo++;
}
function DelRow(iIndex){
//刪除一行
if(iIndex==-99999){
alert("系統提示:沒有選中行號!");
}else{
iIndex = cGetRow;
_("tab1").deleteRow(iIndex);
}
}
function GetRow(){
//獲得行索引
//兩個parentElement分別是TD和TR喲,rowIndex是TR的屬性
//this.parentElement.parentElement.rowIndex
cGetRow=window.event.srcElement.parentElement.parentElement.rowIndex;
}
function ShowRow(){
//顯示行號
alert(cGetRow);
//alert(document.getElementsByTagName("tr").length);
}
</script>

<table id="tab1" border=1>
<tr id="tr1">
<td width=6%><input type=checkbox id="box1" onClick="GetRow()"></td>
<td id="a">第一行</td>
</tr>
<tr id="tr2">
<td width=6%><input type=checkbox id="box2" onClick="GetRow()"></td>
<td id="b">第二行</td>
</tr>
<tr id="tr3">
<td width=6%><input type=checkbox id="box3" onClick="GetRow()"></td>
<td id="c">第三行</td>
</tr>
</table>
<table id="tab1" border=1>
<tr id="tr1">
<td width=6%><input type=checkbox id="box1" onClick="GetRow()"></td>
<td id="a">統計</td>
</tr>
</table>
<input type="submit" name="Submit" value="AddRow" onclick="javascript:AddRow();">
<input type="submit" name="Submit" value="DelRow" onclick="javascript:DelRow(cGetRow);">
<input type="submit" name="Submit" value="ShowRow" onclick="javascript:ShowRow();"> 表格動態增加行

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.