2012-07-15 153 views
7

我剛開始學習Phonegap + jQuery Mobile和HTML5,所以不要因爲我的白癡而放鬆你的神經!從localStorage讀取和寫入?

有人可以告訴我爲什麼這不起作用嗎?當我使用localStorage中的變量時,按下按鈕時只會看到一個空白屏幕,但當使用變量temperature =「100」時,它工作正常。 Android 4.1。

<script type="text/javascript" charset="utf-8"> 
document.addEventListener("deviceready", onDeviceReady, false); 
function onDeviceReady() { 
    window.localStorage.setItem("temperature", "100"); 
    var temperature = window.localStorage.getItem("temperature"); 
} 
</script> 
<div data-role="content"> 
    <p>Working or not?</p> 
    <button onclick="myFunction()">Try it</button> 
    <p id="testi"></p> 
<script type="text/javascript"> 
    function myFunction() { 
    //var temperature = "100";----> This is working! 
    document.getElementById("testi").innerHTML = temperature; 
    } 
</script> 
</div> 

另一個問題:如何處理Windows Phone頁面之間的變量?他們不支持localStorage,那麼如果你還沒有db連接,還有另一種方法來處理這個問題嗎?

謝謝!

薩米

+0

我沒有phonegag或android的經驗,但我很確定這是一個範圍/關閉問題。你在'onDeviceReady'函數內定義'var temperature',它只在該範圍內定義。你不能在'myFunction'中使用它,因爲這個變量有一個完全不同的範圍。我會將此作爲答案提交,但35分鐘內沒有人回答這個問題? – 2012-07-15 10:12:03

+0

你可以提交,作爲答案!有沒有辦法在JavaScript中創建「全局」變量,我認爲是這樣。我需要弄明白。非常感謝! – Sami 2012-07-15 10:14:29

+0

是的,布萊恩只是一個例子。我會在他的回答中添加一些內容,因爲我有點疲憊,無法做出「完整」的答案。 ':'' – 2012-07-15 10:15:27

回答

10

temperature是本地onDeviceReady功能的範圍。也就是說,一旦功能結束,它就消失了。

你有兩個選擇:

// Make it global 
var temperature; 
document.addEventListener("deviceready", onDeviceReady, false); 
function onDeviceReady() { 
    window.localStorage.setItem("temperature", "100"); 
    temperature = window.localStorage.getItem("temperature"); 
} 

或:

// Retrieve it in myFunction 
function myFunction() { 
    var temperature = localStorage.getItem("temperature"); 
    document.getElementById("testi").innerHTML = temperature; 
} 

對於功能範圍的例子一個很好的列表,請嘗試this answer

+0

[javascript關閉如何工作?](http://stackoverflow.com/questions/111102/how-do-javascript-closures-work)也是一個很好的參考資料(儘管它更多一些,子功能的深度)。 – 2012-07-15 10:16:07

+0

謝謝你們兩位!基本上我從來沒有強迫使用JavaScript,但沒有我必須開始,它無處不在...順便說一下,我的第二個問題,如何處理Windows環境中的頁面之間的存儲? – Sami 2012-07-15 10:18:11

+0

如果在'onDeviceReady'函數內爲按鈕的'click'事件添加'EventListener'(而不是在html中寫入'onclick'),則可以使用閉包從'onDeviceReady'函數內的localStorage中檢索'temperature'。 ,但這可能會讓事情變得複雜。 @Sami我沒有Windows Phone的使用經驗,所以我會把它留給Bryan。 – 2012-07-15 10:20:52