2016-01-02 54 views
1

有什麼方法可以修改函數中的全局變量,然後在另一個頁面中使用它?讓我更好地解釋我的情況:我有兩個HTML文件,「Index.html」和「character.html」。在指數中,我講的這個JS代碼:JavaScript修改一個文件中的變量並在另一個文件中讀取

var pcharacter = "initialValue"; 

document.getElementById("barbarianClass").onclick = function(event){ 
    event.preventDefault(); 
    pcharacter = "barbarian"; // the important line here... 
    location.href = "pages/character.html"; 
} 

元素「barbarianClass」是一個鏈接,這就是爲什麼我preventDefault()阻止默認行爲,直到我給了一個值,我pcharacter變種。現在,我有character.html,貼有以下一個單個的JS代碼行:

alert(pcharacter); 

在character.html,我都JS文件相關的,應該怎麼做:

<script type="text/javascript" src="indexCode.js"></script> 
<script type="text/javascript" src="charsCode.js"></script> 

問題是,當我點擊鏈接「barbarianClass」並且我的character.html頁面顯示時,即使當我說它在事件中附帶有值「barbarian」時,警報中顯示的var pcharacter也是「initialValue」打開頁面之前的鏈接。當然,我有這個變量的計劃,但是對於這個問題,警報更容易。請有人告訴我爲什麼保留initialValue?有沒有JS中有一個不明確的規則,說當你加載一個JS文檔時,全局變量不能再被改變或者類似的東西?我沒有任何意義......

+1

讓我們假設這是可能的 - 你想要的頁面有你的銀行信息通過javascript變量訪問不同的頁面? –

+0

是的,就像@EdHeal所說的,我不認爲這是可能的。你是否使用某種路由去頁面?在單個頁面應用程序中,變量將在'window'上聲明,因此當視圖/頁面加載時不會重新加載頁面,這個變量就會持久。雖然我懷疑這種情況。 –

+0

只有當您使用AJAX加載內容時纔有可能,否則它會像現在一樣覆蓋該變量的值。您不僅使用本地存儲或cookie,而且還使用本地存儲或cookie。 –

回答

1

可以在Cookie保存數據

function setCookie(cname, cvalue, exdays) { 
    var d = new Date(); 
    d.setTime(d.getTime() + (exdays*24*60*60*1000)); 
    var expires = "expires="+d.toUTCString(); 
    document.cookie = cname + "=" + cvalue + "; " + expires; 
} 

function getCookie(cname) { 
    var name = cname + "="; 
    var ca = document.cookie.split(';'); 
    for(var i=0; i<ca.length; i++) { 
    var c = ca[i]; 
    while (c.charAt(0)==' ') c = c.substring(1); 
    if (c.indexOf(name) == 0) return c.substring(name.length,c.length); 
    } 
    return ""; 
} 

http://www.w3schools.com/js/js_cookies.asp

你的代碼將

/*save data*/ 
document.getElementById("barbarianClass").onclick = function(event){ 
    event.preventDefault(); 
    setCookie('pcharacter', 'barbarian', 1) 
    location.href = "pages/character.html"; 
} 

/*get data*/ 
alert(getCookie('pcharacter')); 
1

你正在嘗試做的是根本不可能只用變量,因爲在你的評論中某人突出的原因

讓我們假設這是可能的 - 你想要的頁面有你的銀行信息通過javascript變量訪問不同的頁面嗎?

您應該使用cookie(客戶端)或會話(服務器端)來完成此任務。這是你如何在JavaScript設置一個cookie:

document.cookie = "pcharacter=barbarian" 

,然後你可以通過這個簡單的功能在所有其他網頁訪問這個cookie:

function getCookie(cname) { 
var name = cname + "="; 
var ca = document.cookie.split(';'); 
for(var i=0; i<ca.length; i++) { 
    var c = ca[i]; 
    while (c.charAt(0)==' ') c = c.substring(1); 
    if (c.indexOf(name) == 0) return  
    c.substring(name.length,c.length); 
} 
return ""; 
} 

console.log(getCookie("pcharacter")); 

您還可以設置過期時間爲你的cookies 。

+0

爲什麼你不建議本地存儲? –

+0

是的,當然還有很多其他的解決方案! @torazaburo localStorage,會話,webStorage,使用ajax在數據庫中存儲var(這就是我所說的過度殺人)haha –

+0

@torazaburo我猜想用戶的問題構思他是初學者,所以我認爲他強烈推薦一個選項 –

1

Ummmmmmm ......嗯....銀行業問題外:-)

要回答你的問題 - 答案是既肯定又否定。如果你要做的是直接加載一個新的網頁,那麼不行 - 你的全局變量會像棉花糖一樣在一個節目中消失。

但是!相反,如果你使用jQuery的getScript()函數,那麼你可以加載一個新的網頁並保留你的全局變量。所有你需要做的就是將你的網頁轉換爲十六進制,這樣所有不同的字母,如小於號,單引號和雙引號不會將事情弄糟,一旦擁有它就不會轉換它,然後替換你的網頁頁面或插入您的網頁/部分,如你所願。

要將其轉換爲十六進制,您只需要PHP中的bin2hex()函數。要在Javascript中取消某些內容,您可以在GitHub上獲取我的toHex()和fromHex()函數。另外,你可能想要考慮以十六進制的形式將所有內容都發送回服務器,所以腳本小子有點難以給自己+1000武器。只是一個想法。它不會減慢他們的速度 - 但每一點點都有幫助。 :-)

0

您可以使用localStorage將數據從一個文件傳遞到另一個文件。基本語法是:

if (typeof(Storage) !== "undefined") { 
    // Code for localStorage/sessionStorage. 
} else { 
    // Sorry! No Web Storage support.. 
} 

設定值:

localStorage.setItem('myObj', 'My Object'); 

和獲取的值:

localStorage.getItem('myObj'); 

如果不支持本地存儲,你可以隨時退回到的一個Cookie或URL重寫。 否則你可以使用window.name

+0

非常感謝!我可以用sessionStorage來做到這一點,(我第一次使用localStorage,但後來我讀到了sessionStorages在瀏覽器關閉後刪除了信息,我需要它)。我無法使用cookies,因爲我在本地工作,不知何故,它不工作,但隨着sessionStorage變得非常好...再次,非常感謝你... –

相關問題