2016-10-01 19 views
0

我試圖創建兩個按鈕,以便當我點擊每個按鈕時,我將彈出一個小窗口,並顯示一個內容onloading。
這是代碼:全局變量在新彈出窗口中未定義,而事先定義了它們

的index.html:

<!DOCTYPE html> 
<html> 
<head> 
    <meta charset="utf-8" /> 
    <script type="text/javascript" src="script.js"></script> 
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script> 
</head> 
<body ng-app="myApp"> 
<p ng-controller="ctrl"> 
    <span ng-repeat="x in items"> 
     <button ng-click="parentFunc(x.fieldOne,x.fieldTwo)">{{x.fieldOne}}</button> 
     <br><br> 
    </span>     
</p> 
<script>items();</script> 
</body> 
</html>     

的script.js:

var title, content; 

function items(){ 
    angular.module('myApp', []).controller('ctrl', function($scope) { 
    $scope.items = [ 
     {fieldOne:"field1", fieldTwo:"field1 content"}, 
     {fieldOne:"field2", fieldTwo:"field2 content"} 
     ]; 
    $scope.parentFunc=function(titleTmp,contentTmp){ 
     title=titleTmp; 
     content=contentTmp; 
     var OpenWindow = window.open('popUp.html','_blank','width=500, height=400'); 
     return false; 
    } 
    }); 
} 

function codeAddress() { 
    document.getElementById("title").innerHTML=title; 
    document.getElementById("content").innerHTML=content; 
}       

popUp.html:

<!DOCTYPE html> 
<html> 
<head> 
    <meta charset="utf-8" /> 
    <script type="text/javascript" src="script.js"></script> 
</head> 
<body onload="codeAddress();"> 
<h1 id="title"></h1> 
<div id="content"></div> 
</body> 
</html>      

新的彈出窗口打開不出所料,但h1和其中獲得undefined。我試圖調試它,並且我看到在執行前兩行parentFunc之後,全局變量titlecontent得到我所期望的並且它們不是未定義的。但是,當第三行執行並且新窗口打開時,全局變量未定義。

爲什麼在彈出窗口中未定義兩個全局變量?
我該如何解決這個問題?

+1

新窗口是一個新窗口。全局變量僅在全局窗口內是全局變量。如果你想在應用程序的窗口之間傳遞數據,你可以嘗試使用localStorage(假設你的彈出窗口是從同一個域加載的) –

+0

但是全局變量在JavaScript文件中,它包含在兩個html文件中。這些變量對於這兩個html文件都不是全局的,認爲它們在相同的JS文件中? – Rodrigo

+0

每個窗口都有自己的作用域,文件本身是不相關的。該文件中的JavaScript在'window'的上下文中執行 – charlietfl

回答

1

您的方法將無法正常工作:您正嘗試重新加載script.js,然後重新初始化變量。

添加您瓦爾在URL:

var OpenWindow = window.open('popUp.html?title='+titleTmp+'&content='+contentTmp,'_blank','width=500, height=400'); 

然後,在你的第二頁上,閱讀這些參數:

<!DOCTYPE html> 
<html> 
<head> 
    <meta charset="utf-8" /> 
    <script type="text/javascript"> 
    function codeAddress(){ 
    var title = GET_TITLE_FROM_PARAMETER; 
    var content = GET_CONTENT_FROM_PARAMETER; 
    document.getElementById("title").innerHTML=title; 
    document.getElementById("content").innerHTML=content; 
    } 
    </script> 
</head> 
<body onload="codeAddress();"> 
<h1 id="title"></h1> 
<div id="content"></div> 
</body> 
</html>  

,當然還有,從第一頁刪除codeAddress,因爲它是無用的。

僅供參考,要獲取參數值,請查詢this answer