2012-07-15 1 views
7

Właśnie zacząłem studiować Phonegap + jQuery Mobile i HTML5, więc nie trać nerwu z moim idiotyzmem!Czytanie i pisanie z localStorage?

Czy ktoś może mi powiedzieć, dlaczego to nie działa? Kiedy używam zmiennej z localStorage, po naciśnięciu przycisku pojawia się pusty ekran, ale gdy używana jest zmienna temperatura = "100", działa poprawnie. 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> 

Kolejne pytanie: Jak radzić sobie ze zmiennymi między stronami w Windows Phone? Nie obsługują one localStorage, więc czy istnieje inny sposób na obsłużenie tego, jeśli nie masz połączenia db?

Dzięki!

Sami

+0

Nie mam doświadczenia z phonegagiem lub androidem, ale jestem prawie pewien, że jest to problem z zasięgiem/zamknięciem. Definiujesz 'var temperature' wewnątrz funkcji' onDeviceReady', jest ona zdefiniowana tylko wewnątrz tego zakresu. Nie można go używać wewnątrz 'myFunction', ponieważ ta zmienna ma zupełnie inny zakres. Podałbym to jako odpowiedź, ale dlaczego nikt nie odpowiedział na to w ciągu 35 minut? –

+0

U może po prostu przesłać to jako odpowiedź! Czy istnieje sposób na tworzenie zmiennych "globalnych" w JavaScript, tak myślę. Muszę to rozgryźć. Wielkie dzięki! – Sami

+0

Tak, Bryan właśnie zrobił przykład. Dodam trochę do jego odpowiedzi i jako że jestem trochę zmęczony, aby udzielić "kompletnej" odpowiedzi. ':)' –

Odpowiedz

10

temperature jest lokalny zakres funkcji onDeviceReady. Oznacza to, że gdy funkcja się skończy, zniknie.

Masz dwie opcje:

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

czyli

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

dla dobrego listy przykładów zakres funkcji, spróbuj this answer.

+0

[Jak działają zamknięcia javascript?] (Http://stackoverflow.com/questions/111102/how-do-javascript-closures-work) to również dobre odniesienie (mimo że jest trochę więcej głębokość dla podfunkcji). –

+0

Dziękuję wam obojgu! Zasadniczo nigdy nie byłem zmuszony używać JavaScript, ale nie muszę zaczynać, jest wszędzie ... Nawiasem mówiąc, moje drugie pytanie, jak radzić sobie ze składowaniem stron w środowisku Windows? – Sami

+0

Zamknięcie może być użyte do odzyskania 'temperatury' z localStorage wewnątrz funkcji' onDeviceReady' jeśli 'addEventListener' dla zdarzenia' click' przycisku wewnątrz funkcji 'onDeviceReady' (zamiast pisania' onclick' w html) , ale to może tylko komplikować sprawy. @Sami Nie mam doświadczenia z Windows Phone, więc zostawię to z Bryanem. –