關於Javascipt 控制父子視窗的問題
請問~
在父視窗有一個動態表格如下
ID OPERATION
A modifyA
B modifyB
C modifyC
.
.
.
modifyA,modifyB, modifyC, ...皆可連到一子視窗來編輯資料
我想要做到如果我案不同的modifyID, 就會產生不同的子視窗(如我按了modifyA, 之後又按了modifyB, 就會各自開一個子視窗)
但是如果我按同一個modifyID, 就會focus到已經有的子視窗(如我按了一次modifyA, 在該子視窗尚未關閉時,又再付視窗又按了一次modifyA, 此時就會focus到之前按modifyA產生出來的子視窗)
又,我每次關掉一個子視窗,父視窗都惠reload一次。
我之前用了
if (!xxx || xxx.closed) {
xxx=window.open("aa.jsp","xxx")
} else {
xxx.focus()
}
這樣開了第一個子視窗之後(modifyA),除非關掉,不然無法開另一個(modifyB)
我還試了
var xxx=[]
if (!xxx[id] || xxx[id].closed) {
xxx[id] = window.open("aa.jsp", id)
} else {
xxx[id].focus()
}
這樣在每次關掉其中一個子視窗之後,父視窗重新整理之後xxx[]就被清掉了~所以不行
然後有查到可以用cookie的方式存放, 但xxx[]裡面的每一個都是一個object, cookie似乎只能存string, 所以不知道怎麼用,
又我父視窗類似的鍵結太多了 (如modifyID, viewID, historyID...), cookie也不知道要怎麼存放
請問有更好的方式嗎?或是我之前的方式要怎麼改才能合用,還是cookie其實是可以用的...
請各位大大幫忙~謝謝
------解决方案--------------------
你好。。。我刚刚写了个简单的例子,不知道对你会不会有帮助。。。我把代码贴出来吧:
三个html页面:
父窗口:parent.html
代码如下:
<html>
<title>父窗口</title>
<head>
<script>
var xxx = [];
var reloadSuccess = false;
function f_open(id){
if (!xxx[id] || xxx[id].closed) {
xxx[id] = window.open(id + ".html");
} else {
xxx[id].focus()
}
}
function f_onload(){
reloadSuccess = true;
alert(123);
}
</script>
</head>
<body onload="f_onload();">
<input value="a" type="button" onclick="f_open('a');">
<input value="b" type="button" onclick="f_open('b');">
</body>
</html>
子窗口a:a.html
代码如下:
<html>
<title>a</title>
<head>
<script>
var isClose = true;
window.onbeforeunload = function(){
window.opener.reloadSuccess = false;
var cpxxx = window.opener.xxx;
window.opener.location.reload();
while(isClose){
if(window.opener.reloadSuccess){
isClose = false;
}
}
window.opener.xxx = cpxxx;
window.opener.xxx['a'] = false;
}
</script>
</head>
<body>
THIS IS A.
</body>
</html>
子窗口b:b.html
代码如下:
<html>
<title>b</title>
<head>
<script>
var isClose = true;
window.onbeforeunload = function(){
window.opener.reloadSuccess = false;
var cpxxx = window.opener.xxx;
window.opener.location.reload();
while(isClose){
if(window.opener.reloadSuccess){
isClose = false;
}
}
window.opener.xxx = cpxxx;
window.opener.xxx['b'] = false;
}
</script>
</head>
<body>
THIS IS B.
</body>
</html>
你在本地建三个文件,把代码贴上去试一试吧,希望能够帮助你。。。