js 窗口间传值

在WEB页面中,我们实现页面跳转的方法通常是用LINK,BUTTON LINK ,IMG LINK等等,由用户点击某处,然后直接由浏览器帮我们跳转。

但有时候,需要当某事件触发时,我们先做一些操作,然后再跳转,这时,就要用JAVASCRIPT来实现这一跳转功能。

下面是具体的做法:

一:跳转到新页面,并且是在新窗口中打开时:

            function gogogo()
            {

                //do someghing here...
                window.open("test2.html");
            }    

window是一个javascript对象,可以用它的open方法,需要注意的是,如果这个页面不是一相相对路径,那么要加http://,比如:

            function gogogo()
            {
                window.open("http://www.google.com");
            }   

二:就在本页面窗口中跳转:

            function totest2()
            {
                window.location.assign("test2.html");
            }   

 

如果直接使用location.assgin()也可以,但是window.location.assign()好像更合理一些,当前窗口的location对象的assign()方法。

另外,location对象还有一个方法replace()也可以做页面跳转,它跟assign()方法的区别在于:

replace() 方法不会在 History 对象中生成一个新的纪录。当使用该方法时,新的 URL 将覆盖 History 对象中的当前纪录。

 

下面学习如何在页面跳转的时候进行值的传递,当使用window.open()打开新页面时,浏览器会认为这两个窗口之间有一种打开与被打开的关系,所以在被打开的新窗口中在当前窗口的window对象中有一个window.opener 属性,这个值里面放着打开窗口的引用,所以可以获得这个值,进而引用上一页面内的对象的值,示例如下:

 

 

 1 <html>
2 <head>
3 <title>test1</title>
4 <script type="text/javascript">
5 function totest2()
6 {
7 window.open("test2.html");
8 }
9 </script>
10 </head>
11 <body>
12 <label id="label1" >page test1</label>
13 <br><br>
14 <input type="text" id="tx1">
15 <input type="button" id="bt2" value="to test2" onclick="totest2()">
16 </body>
17  </html>

 

 

 

 1 <html>
2 <head>
3 <title>test2</title>
4 <script type="text/javascript">
5 function getvalue()
6 {
7 var pare=window.opener;
8 if(pare!=null)
9 {
10 var what=pare.document.getElementById("tx1");
11 if(what!=null)
12 {
13 alert(what.value);
14 }
15 }
16 }
17 </script>
18 </head>
19 <body>
20 <label id="label1" >page test2</label>
21 <br><br>
22 <input type="button" onclick="getvalue()" value="get test1 page value">
23 </body>
24  </html>

 

 

这两个页面,可以从后一个页面中获得前一个页面中的值,但是我感觉好像不大实用。。。。。。

优点:取值方便.只要window.opener指向父窗口,就可以访问所有对象.
       不仅可以访问值,还可以访问父窗口的方法.值长度无限制.
缺点:两窗口要存在着关系.就是利用window.open打开的窗口.不能跨域.

 

下面看看另一种方法,使用URL附加字段在页面跳转间传值,前面用XMLHttpRequest时,用到过这种方式。简单原始的示例如下:

 

 

 1 <html>
2 <head>
3 <title>test3</title>
4 <script type="text/javascript">
5 function totest2()
6 {
7 var parm1=document.getElementById("tx1").value;
8 var parm2=document.getElementById("tx2").value;
9 var myurl="test4.html"+"?"+"parm1="+parm1+"&parm2="+parm2;
10 window.location.assign(myurl);
11 }
12 </script>
13 </head>
14 <body>
15 <label id="label1" >page test3</label>
16 <br><br>
17 <input type="text" id="tx1">
18 <input type="text" id="tx2">
19 <input type="button" id="bt2" value="to test2" onclick="totest2()">
20 </body>
21  </html>

 

 1 <html>
2 <head>
3 <title>test1</title>
4 <script type="text/javascript">
5 function getparm1()
6 {
7 var url=location.href;
8 var tmp1=url.split("?")[1];
9 var tmp2=tmp1.split("&")[0];
10 var tmp3=tmp2.split("=")[1];
11 var parm1=tmp3;
12 alert(parm1);
13 }
14 function getparm2()
15 {
16 var url=location.href;
17 var tmp1=url.split("?")[1];
18 var tmp2=tmp1.split("&")[1];
19 var tmp3=tmp2.split("=")[1];
20 var parm2=tmp3;
21 alert(parm2);
22 }
23 </script>
24 </head>
25 <body>
26 <label id="label1" >page test4</label>
27 <br><br>
28 <input type="button" id="bt1" value="get parm1" onclick="getparm1()">
29 <br><br>
30 <input type="button" id="bt2" value="get parm1" onclick="getparm2()">
31 </body>
32  </html

 

 

我记得前面在看XMLHttpRequest的时候有一个QueryString对象可以直接从URL参数中取值,我不清楚这儿可不可以直接用,试了一下好像不行。

 

最后一种页面间传值的方法就是COOKIE共享,这个比较容易理解,由一个页面在客户端机器放置一个COOKIE文件,下一个页面访问的时候,直接读取这里面的值就OK了。

 

-------------------------------------------------------------------------------------------------------------------------------------------------

父窗口:     
    
url = url + '?winFlg=aaa&winPig=bbb';     
    
window.open(url, '', '');     
    
子窗口:     
    
var URLParams = new Object();     
var aParams = document.location.search.substr(1).split('&');     
for (var i=0; i < aParams.length; i++) {     
    var aParam = aParams[i].split('=');     
     URLParams[aParam[0]] = aParam[1];     
}     
    
alert(URLParams["winFlg"]);     
    
alert(URLParams["winPig"]);     
    
==================================================================================     
    
打开一个新窗口,该子窗口调用父对象的方法或变量,这个问题一直没有搞清楚。网上找了些资料,总结一下:     
    
打开新窗口一般有几种方法,window.open(...),window.showModalDialog(...),以及iframe中嵌套页面这里也一起研究吧,另外还有window.navigate(...)、window.location.href="..."、window.history.back(-1);都是实现同意页面内容跳转的,这里不讨论。     
    
1、open子窗口:用window.opener代表父窗口的window对象     
    
2、模态子窗口:间接通过传window对象到子窗口,然后子窗口可获得父窗口的window对象     
    
3、iframe中子页面:用window.parent代表父窗口的window对象     
    
    
父页面:1.htm    代码:     
    
<html>     
<head>     
<title>打开父子窗口传值研究-父窗口</title>     
    
<mce:script ><!--  
     
var parValue="现在显示了父窗口中的变量值";     
    
function test(){     
alert("现在显示了父窗口中的方法正常执行");     
}     
    
// --></mce:script>     
</head>     
<body >     
<input type="button" id="mybutton1"    value="打开open新窗口"    οnclick="window.open('2.htm');">     
<input type="button" id="mybutton2"    value="打开modal窗口"    οnclick="window.showModalDialog('3.htm',window);" >     
<br>     
<iframe id="subiframe"    name="subiframe"     src="4.htm" mce_src="4.htm" scrolling="auto" frameborder="1" ></iframe>     
</body>     
</html>     
    
    
2.htm 代码:     
    
<html>     
<head>     
<title>打开父子窗口传值研究-open打开子窗口</title>     
<mce:script type="text/javascript"><!--  
     
var buttonValue=window.opener.document.getElementById("mybutton2").value //获取父窗口中的对象     
var parentValue=window.opener.parValue;       //获取父窗口中的变量     
    
function doParTest(){     
window.opener.test();        //调用父窗口中的方法     
    
}     
// --></mce:script>     
</head>     
<body>     
    
<input type="button" value="open打开子窗口按钮" οnclick="alert('buttonValue:'+buttonValue);alert('parentValue:'+parentValue);doParTest()">     
    
</body>     
</html>     
    
    
3.htm 代码:     
    
<html>     
<head>     
<title>打开父子窗口传值研究-打开modal子窗口</title>     
<mce:script type="text/javascript"><!--  
     
var parentWin=window.dialogArguments;     
var buttonValue=parentWin.document.getElementById("mybutton2").value   //获取父窗口中的对象     
var parentValue=parentWin.parValue;       //获取父窗口中的变量     
function doParTest(){     
parentWin.test();        //调用父窗口中的方法     
}     
// --></mce:script>     
</head>     
    
<body bgcolor="#FFFFFF" text="#000000">     
    
<input type="button" value="modal子窗口按钮" οnclick="alert('buttonValue:'+buttonValue);alert     
    
('parentValue:'+parentValue);parentWin.test();">     
</body>     
</html>     
    
    
4.htm    代码:     
    
<html>     
<head>     
<title>打开父子窗口传值研究-iframe中子窗口</title>     
<mce:script type="text/javascript"><!--  
     
var buttonValue=window.parent.document.getElementById("mybutton2").value //获取父窗口中的对象     
var parentValue=window.parent.parValue;       //获取父窗口中的变量     
    
function doParTest(){     
window.parent.test();        //调用父窗口中的方法     
}     
// --></mce:script>     
</head>     
<body>     
    
<input type="button" value="iframe中子窗口按钮" οnclick="alert('buttonValue:'+buttonValue);alert('parentValue:'+parentValue);doParTest()">     
    
</body>     
</html>     
    
父窗口:  
 
url = url + '?winFlg=aaa&winPig=bbb';  
 
window.open(url, '', '');  
 
子窗口:  
 
var URLParams = new Object();  
var aParams = document.location.search.substr(1).split('&');  
for (var i=0; i < aParams.length; i++) {  
    var aParam = aParams[i].split('=');  
     URLParams[aParam[0]] = aParam[1];  
}  
 
alert(URLParams["winFlg"]);  
 
alert(URLParams["winPig"]);  
 
==================================================================================  
 
打开一个新窗口,该子窗口调用父对象的方法或变量,这个问题一直没有搞清楚。网上找了些资料,总结一下:  
 
打开新窗口一般有几种方法,window.open(...),window.showModalDialog(...),以及iframe中嵌套页面这里也一起研究吧,另外还有window.navigate(...)、window.location.href="..."、window.history.back(-1);都是实现同意页面内容跳转的,这里不讨论。  
 
1、open子窗口:用window.opener代表父窗口的window对象  
 
2、模态子窗口:间接通过传window对象到子窗口,然后子窗口可获得父窗口的window对象  
 
3、iframe中子页面:用window.parent代表父窗口的window对象  
 
 
父页面:1.htm    代码:  
 
<html>  
<head>  
<title>打开父子窗口传值研究-父窗口</title>  
 
<mce:script ><!--
  
var parValue="现在显示了父窗口中的变量值";  
 
function test(){  
alert("现在显示了父窗口中的方法正常执行");  
}  
 
// --></mce:script>  
</head>  
<body >  
<input type="button" id="mybutton1"    value="打开open新窗口"    οnclick="window.open('2.htm');">  
<input type="button" id="mybutton2"    value="打开modal窗口"    οnclick="window.showModalDialog('3.htm',window);" >  
<br>  
<iframe id="subiframe"    name="subiframe"     src="4.htm" mce_src="4.htm" scrolling="auto" frameborder="1" ></iframe>  
</body>  
</html>  
 
 
2.htm 代码:  
 
<html>  
<head>  
<title>打开父子窗口传值研究-open打开子窗口</title>  
<mce:script type="text/javascript"><!--
  
var buttonValue=window.opener.document.getElementById("mybutton2").value //获取父窗口中的对象  
var parentValue=window.opener.parValue;       //获取父窗口中的变量  
 
function doParTest(){  
window.opener.test();        //调用父窗口中的方法  
 
}  
// --></mce:script>  
</head>  
<body>  
 
<input type="button" value="open打开子窗口按钮" οnclick="alert('buttonValue:'+buttonValue);alert('parentValue:'+parentValue);doParTest()">  
 
</body>  
</html>  
 
 
3.htm 代码:  
 
<html>  
<head>  
<title>打开父子窗口传值研究-打开modal子窗口</title>  
<mce:script type="text/javascript"><!--
  
var parentWin=window.dialogArguments;  
var buttonValue=parentWin.document.getElementById("mybutton2").value   //获取父窗口中的对象  
var parentValue=parentWin.parValue;       //获取父窗口中的变量  
function doParTest(){  
parentWin.test();        //调用父窗口中的方法  
}  
// --></mce:script>  
</head>  
 
<body bgcolor="#FFFFFF" text="#000000">  
 
<input type="button" value="modal子窗口按钮" οnclick="alert('buttonValue:'+buttonValue);alert  
 
('parentValue:'+parentValue);parentWin.test();">  
</body>  
</html>  
 
 
4.htm    代码:  
 
<html>  
<head>  
<title>打开父子窗口传值研究-iframe中子窗口</title>  
<mce:script type="text/javascript"><!--
  
var buttonValue=window.parent.document.getElementById("mybutton2").value //获取父窗口中的对象  
var parentValue=window.parent.parValue;       //获取父窗口中的变量  
 
function doParTest(){  
window.parent.test();        //调用父窗口中的方法  
}  
// --></mce:script>  
</head>  
<body>  
 
<input type="button" value="iframe中子窗口按钮" οnclick="alert('buttonValue:'+buttonValue);alert('parentValue:'+parentValue);doParTest()">  
 
</body>  
</html>  
  
 

下面是自己写了一个测试例子:
test1:

view plaincopy to clipboardprint?
<input type="text" id="txt">     
<div style="float:left;" mce_style="float:left;" id="div" ></div>     
<input type="button" value="open" onClick="openWindow()">     
    
<mce:script type="text/javascript"><!--  
     
function openWindow(){     
    
  var result=window.showModalDialog("test2.html",window);     
    alert(result);     
  var arr = result.split('_');     
  var arrCodes = arr[0].split(',');     
  var arrNames = arr[1].split(',');     
  document.getElementById('txt').value=arr[1];     
       
  var innerH = '';     
  for(var i=0;i<arrCodes.length-1;i++){     
    innerH+='<input type=/"text/" name=/"old/" value=/"'+arrCodes[i]+'/" />'    
  }     
  document.getElementById('div').innerHTML=innerH;     
       
}     
// --></mce:script>   
<input type="text" id="txt">  
<div style="float:left;" mce_style="float:left;" id="div" ></div>  
<input type="button" value="open" onClick="openWindow()">  
 
<mce:script type="text/javascript"><!--
  
function openWindow(){  
 
  var result=window.showModalDialog("test2.html",window);  
    alert(result);  
  var arr = result.split('_');  
  var arrCodes = arr[0].split(',');  
  var arrNames = arr[1].split(',');  
  document.getElementById('txt').value=arr[1];  
    
  var innerH = '';  
  for(var i=0;i<arrCodes.length-1;i++){  
    innerH+='<input type=/"text/" name=/"old/" value=/"'+arrCodes[i]+'/" />' 
  }  
  document.getElementById('div').innerHTML=innerH;  
    
}  
// --></mce:script> 
 

test2:

view plaincopy to clipboardprint?
<html>     
    <head>     
<mce:script type="text/javascript"><!--  
     
    
function onload(){     
         
    var parentWin = window.dialogArguments;     
    var obj = parentWin.document.getElementsByName('old');     
    var oldValues = new Array();     
    for(var i=0;i<obj.length;i++){     
        oldValues[i]=obj[i].value;     
    }     
         
    var obj = document.getElementsByName('selectValues');     
    for(var i = 0;i<obj.length;i++){     
        for(var j=0;j<oldValues.length;j++){     
            if(obj[i].value == oldValues[j])     
            { obj[i].checked='checked';}     
        }     
         
}     
}     
         
    
function ok(){     
             
 var industryCodes = new Array();     
 var industryNames = new Array();        
         
      var tmpCodes = '';     
    var tmpNames = '';     
    var codes = document.getElementsByName("selectValues");     
    var names = document.getElementsByName("selectNames");     
    
    for(var i =0 ,j=0 ; i <codes.length;i++){     
        if(codes[i].checked){     
            tmpCodes  += codes[i].value+',';     
            tmpNames += names[i].value+',';     
            j++;     
        }     
    }     
    
   var tmpValue =tmpCodes+'_'+tmpNames;     
        
   window.returnValue = tmpValue;     
   window.close();     
}        
// --></mce:script>      
</head>     
    
<body οnlοad="onload()">     
<input type="text" id="test1" value="" />     
<input type="checkbox" name="selectValues" value="1" />文本1<input type="hidden" name="selectNames" value="文本1" />     
<br>     
<input type="checkbox" name="selectValues" value="2" />文本2<input type="hidden" name="selectNames" value="文本2" />     
<br>     
<input type="checkbox" name="selectValues" value="3" />文本3<input type="hidden" name="selectNames" value="文本3" />     
<br>     
<input type="button" οnclick="ok()" />     
</body>     
</html>   
<html>  
    <head>  
<mce:script type="text/javascript"><!--
  
 
function onload(){  
      
    var parentWin = window.dialogArguments;  
    var obj = parentWin.document.getElementsByName('old');  
    var oldValues = new Array();  
    for(var i=0;i<obj.length;i++){  
        oldValues[i]=obj[i].value;  
    }  
      
    var obj = document.getElementsByName('selectValues');  
    for(var i = 0;i<obj.length;i++){  
        for(var j=0;j<oldValues.length;j++){  
            if(obj[i].value == oldValues[j])  
            { obj[i].checked='checked';}  
        }  
      
}  
}  
      
 
function ok(){  
          
 var industryCodes = new Array();  
 var industryNames = new Array();     
      
      var tmpCodes = '';  
    var tmpNames = '';  
    var codes = document.getElementsByName("selectValues");  
    var names = document.getElementsByName("selectNames");  
 
    for(var i =0 ,j=0 ; i <codes.length;i++){  
        if(codes[i].checked){  
            tmpCodes  += codes[i].value+',';  
            tmpNames += names[i].value+',';  
            j++;  
        }  
    }  
 
   var tmpValue =tmpCodes+'_'+tmpNames;  
     
   window.returnValue = tmpValue;  
   window.close();  
}     
// --></mce:script>   
</head>  
 
<body οnlοad="onload()">  
<input type="text" id="test1" value="" />  
<input type="checkbox" name="selectValues" value="1" />文本1<input type="hidden" name="selectNames" value="文本1" />  
<br>  
<input type="checkbox" name="selectValues" value="2" />文本2<input type="hidden" name="selectNames" value="文本2" />  
<br>  
<input type="checkbox" name="selectValues" value="3" />文本3<input type="hidden" name="selectNames" value="文本3" />  
<br>  
<input type="button" οnclick="ok()" />  
</body>  
</html>  

模态弹出窗口

view plaincopy to clipboardprint?
returnValue除了可以是布尔值,整型值等以外还可以是个js数组,用来传递大量数据。     
    
 showModalDialog,是模态窗口,始终获得焦点,但弹出的窗体不能刷新,此弹出的窗口 里操作button,要想不弹出新窗口,需在     
    
弹出的窗口中在<head>和</head>之间加<base target="_self">。 


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/Arthur0088/archive/2010/07/31/5777858.aspx

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值