[英]How on earth do I change a global variable from within a function?
我花了3天的時間來解決這個簡單的問題。 我想要的是讓我的整個網站記住winversion
全局變量值並能夠從函數中對其進行更改。 (是的,我知道全局變量比darthwader更邪惡,但是請這是我一生中唯一發生的事情)
我有一個帶<iframe>
html文件,並且當用戶在內部單擊時,我將來自我域的不同頁面加載到該<iframe>
。
這是我的index.html(在<iframe>
周圍有一些div,但是我很確定這是無關緊要的,因為其他所有功能都可以使用,而javascript僅適用於此<iframe>
)
<script type="text/javascript" src='script.js'></script>
---------- ( some inner body html , not important)----------------
<iframe id="myiframe" src="mainproblems.html" >
默認的iFrame頁面具有此html代碼
<a href="#" onclick="setwinver('xp')";>I have Windows XP </a>
<a href="#" onclick="setwinver('win7')";> have Windows 7/Vista </a>
我的script.js是這個
// This is supposed to be my global variable to hold windows version value
var winversion ;
// This function (I officially hate it now) is supposed to change
// winversion variable based on what user clicked on the iFrame
function setwinver(ver)
{
//so now winversion should either have xp or win7 assigned
winversion=ver;
}
但是后來,在下一個<iframe>
當我嘗試在同一JavaScript文件中讀取winversion
時,它說未定義。 當用戶在頁面1上選擇Windows版本並在下一個html頁面中單擊鏈接以啟動msconfig描述頁面(已加載在<iframe>
)時,將觸發該navigatenow()
函數。
function navigatenow()
{
if (winversion == "xp")
{
window.location.href=("msconfigxp.html");
}
else
{
window.location.href=("msconfig7.html");
}
}
我努力了:
使用/不使用var
。
使用/不使用單引號,雙引號(盡管我知道這沒有區別)。
閱讀有關起重的十幾篇文章。
使用persistjs幾個小時。
冥想和祈禱!
沒什么用。 該死的winversion
變量仍然和我存在的目的一樣不確定。
我想要的只是讓我的html文件記住用戶選擇了哪個Windows版本(不,我無法以編程方式檢測到Windows版本,我的目的是詢問用戶版本是否不同)。
修復此問題將不勝感激,如果沒有,請提出適合的峭壁,我可以從中跳下。
iframe中的頁面是一個單獨的窗口,它不會繼承索引頁面的范圍。 您需要指定要轉到父窗口並在此處使用腳本:
window.parent.setwinver('xp');
和訪問變量相同:
if (window.parent.winversion == "xp")
這是一個工作示例: http : //jsfiddle.net/ga62A/
索引頁面會加載以下iframe: http : //jsfiddle.net/cMDvc/1/
然后,您繼續以下步驟: http : //jsfiddle.net/9qjaX/
LePrince,當您更改頁面時,JS會丟棄所有有關更改的內容。 JavaScript已讀入頁面,但您無法從最終用戶的瀏覽器寫回JS文件,因為這只是在要求您的生活,網站和所有金錢被盜。
您對讀取的原始代碼所做的所有更改都存儲在內存中。 該內存僅持續到頁面持續的時間。 之后,它將重新加載頁面,與以前一樣。
如果您需要它做更多的事情,則可以從document.cookie
開始。 它只用於存儲很少的信息,除非您編寫用於獲取Cookie和設置Cookie的工具,否則使用起來並不有趣。
接下來是localStorage,它更加有用和更新(但舊的IE不支持它,因此裝有Windows 7的XP上的人們無法使用它)。 但這仍然僅對一個用戶的數據有用,而對其他任何用戶都不會更改任何內容。
如果您希望能夠添加……說,評論或星級評分,讓其他人可以看到帖子和評分以及上載的圖片,那么您需要研究服務器端編程。 Ruby(/ Rails),PHP,Node.js等。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.