JavaScript用window.opener實現父窗口和子窗口傳值


在實際項目中經常會有這樣的需求,點擊某個按鈕彈出對話框,對話框中可以編輯和修改相應的內容,然后再保存並關閉窗口,如果寫一個靜態的div作為顯示隱藏,倒也可以,但是還得調整樣式,麻煩點。現在用window.open就可以實現同樣的效果,父頁面和子頁面照樣傳值。

demo代碼如下:

父頁面:

html部分:

<!--
    Author : 趙一鳴
    Blog : http://www.zymseo.com
    Time : 2016/9/20
-->
<!doctype html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>父頁面</title>
        <meta name="Keywords" content="">
        <meta name="Description" content="">
        <style type="text/css">
            .clear{
                position:fixed;
                background:rgba(0,0,0,0.2);
                top:0px;
                right:0px;
                bottom:0px;
                left:0px;
                display:none;
            }
        </style>
    </head>
    <body>
        <input type="text" id="parentInpt" />
        <input type="button" value="編輯" id="edit" />
        <!--遮罩層-->
        <div class="clear"></div>
    </body>
</html>

javascript部分:

<script type="text/javascript">
    var parentPage = {
        oEdit : document.getElementById('edit'),
        oParentInpt : document.getElementById('parentInpt'),
        oClear : document.getElementsByClassName('clear')[0],
        //初始化方法
        init : function(){
            //點擊編輯按鈕
            this.oEdit.onclick = this.editFunction;
        },
        //打開子頁面,初始化子頁面的寬高及位置
        editFunction : function(){
            var This = parentPage;
            var oParentInptVal = This.oParentInpt.value;
            This.oClear.style.display = 'block';
            window.open('son.html',window,'height=500px,width=500px,left=500px,top=0px');
        }
    };
    parentPage.init();
</script>

子頁面:

html部分:

<!--
    Author : 趙一鳴
    Blog : http://www.zymseo.com
    Time : 2016/9/20
-->
<!doctype html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>子頁面</title>
        <meta name="Keywords" content="">
        <meta name="Description" content="">
    </head>
    <body>
        <input type="text" id="sonInpt" />
        <input type="button" value="保存" id="save">
    </body>
</html>

javascript部分:

<script type="text/javascript">
    var sonPage = {
        oSonInpt : document.getElementById('sonInpt'),
        oParentInpt : window.opener.document.getElementById('parentInpt'),
        oSave : document.getElementById('save'),
        //初始化方法
        init : function(){
            //子頁面自動獲取父頁面的input值
            this.oSonInpt.value = this.oParentInpt.value;
            //點擊保存按鈕
            this.oSave.onclick = this.saveFunction;
            //監聽用戶是否點擊了子頁面的關閉窗口按鈕,如果是,就傳值
            window.onbeforeunload = sonPage.sonToParent;
        },
        //保存
        saveFunction : function(){
            sonPage.sonToParent();
            window.close();
        },
        //子頁面給父頁面傳值,執行:
        sonToParent : function(){
            var This = sonPage;
            var oSonInptVal = This.oSonInpt.value;
            This.oParentInpt.value = oSonInptVal;
            window.opener.document.getElementsByClassName('clear')[0].style.display = 'none';
        }
    };
    sonPage.init();
</script>

另外,你也可以用iframe實現同樣的技術:我博客的WEB前端開發案例庫中有一篇文章:《解決原生js或jQuery 實現父窗口的問題,如window.parent.document.getElementById》。

通過window對象的open()方法,open()方法將會產生一個新的window窗口對象。其用法為:

window.open(URL,windowName,parameters);

URL: 描述要打開的窗口的URL地址,如何為空則不打開任何網頁;

windowName:描述被打開的窗口的民稱,可以使用'_top'、'_blank'等內建名稱,這里的名稱跟<a href="..." target="...">里的target屬性是一樣的。

parameters:描述被打開的窗口的參數值,或者說是樣貌,其包括窗口的各個屬性值,及要傳入的參數值。

參數說明如下:

top=# 窗口頂部離開屏幕頂部的像素數;

left=# 窗口左端離開屏幕左端的像素數;

width=# 窗口的寬度;

height=# 窗口的高度;

menubar=... 窗口有沒有菜單,取值yes或no;

toolbar=... 窗口有沒有工具條,取值yes或no;

location=... 窗口有沒有地址欄,取值yes或no;

directories=... 窗口有沒有連接區,取值yes或no;

scrollbars=... 窗口有沒有滾動條,取值yes或no;

status=... 窗口有沒有狀態欄,取值yes或no;

resizable=... 窗口給不給調整大小,取值yes或no;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM