簡體   English   中英

我到底如何在函數中更改全局變量?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM