2012-07-15 15 views
7

Ich fing gerade an, Phonegap + jQuery Mobile und HTML5 zu studieren, also verliere nicht deine Nerven mit meiner Idiotie!Lesen und Schreiben von localStorage?

Kann mir jemand sagen, warum das nicht funktioniert? Wenn ich eine Variable von localStorage verwende, erhalte ich nur einen leeren Bildschirm, wenn ich den Knopf drücke, aber wenn eine variable Temperatur = "100" verwendet wird, funktioniert es gut. 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> 

Eine andere Frage: Wie Variablen zwischen Seiten in Windows Phone umgehen? Sie unterstützen localStorage nicht, gibt es also eine andere Möglichkeit, dies zu handhaben, wenn Sie keine db-Verbindung haben?

Danke!

Sami

+0

Ich habe keine Erfahrung mit Phonegag oder Android, aber ich bin mir ziemlich sicher, dass es ein Bereich/Schließung Problem ist. Sie definieren 'var temperature' innerhalb der 'onDeviceReady'-Funktion, sie wird nur innerhalb dieses Bereichs definiert. Sie können es nicht innerhalb der 'myFunction' verwenden, da diese Variable einen völlig anderen Gültigkeitsbereich hat. Ich würde dies als Antwort einreichen, aber wieso hat niemand in 35 Minuten geantwortet? –

+0

U kann das nur als Antwort einreichen! Gibt es eine Möglichkeit, "globale" Variablen in JavaScript zu erstellen, denke ich. Ich muss es herausfinden. Danke vielmals! – Sami

+0

Ja, Bryan hat gerade ein Beispiel gemacht. Ich werde etwas zu seiner Antwort hinzufügen und da ich etwas müde bin, eine "vollständige" Antwort zu geben. ':)' –

Antwort

10

temperature ist lokal auf dem Umfang der onDeviceReady Funktion. Das heißt, sobald die Funktion beendet ist, ist sie weg.

Sie haben zwei Möglichkeiten:

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

oder:

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

Für eine gute Liste von Beispielen für Scope-Funktion, versuchen this answer.

+0

[Wie funktionieren Javascript-Schließungen?] (Http://stackoverflow.com/questions/111102/how-do-javascript-closures-work) ist auch eine gute Referenz (auch wenn es ein wenig mehr ist Tiefe für Unterfunktionen). –

+0

Danke euch beiden! Im Grunde habe ich nie gezwungen, JavaScript zu verwenden, aber nein, ich muss anfangen, es ist überall ... Übrigens meine zweite Frage, wie man mit der Speicherung zwischen Seiten in der Windows-Umgebung umgehen soll? – Sami

+0

Eine Schließung könnte verwendet werden, um "Temperatur" aus dem localStorage innerhalb der 'onDeviceReady'-Funktion abzurufen, wenn Sie'EventListener' für das' click' -Ereignis der Schaltfläche innerhalb der 'onDeviceReady'-Funktion hinzufügen (anstatt den' onclick' im HTML-Code zu schreiben) , aber das könnte nur die Dinge verkomplizieren. @Sami Ich habe keine Erfahrung mit Windows Phone, also überlasse ich es Bryan. –