2012-07-15 32 views
7

Tôi mới bắt đầu nghiên cứu Phonegap + jQuery Mobile và HTML5, vì vậy đừng rời bỏ dây thần kinh của bạn với sự ngu ngốc của tôi!Đọc và viết từ localStorage?

Ai đó có thể cho tôi biết lý do tại sao tính năng này không hoạt động? Khi tôi đang sử dụng một biến từ localStorage, tôi chỉ nhận được một màn hình trống khi nhấn nút, nhưng khi sử dụng nhiệt độ biến = "100", nó hoạt động tốt. 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> 

Một câu hỏi khác: Cách xử lý các biến giữa các trang trong Windows Phone? Họ không hỗ trợ localStorage, vì vậy có cách nào khác để xử lý điều này nếu bạn không có kết nối db không?

Cảm ơn!

Sami

+0

Tôi không có kinh nghiệm với phonegag hoặc android, nhưng tôi khá chắc chắn đó là vấn đề về phạm vi/đóng cửa. Bạn đang định nghĩa 'var temperature' bên trong hàm' onDeviceReady', nó chỉ được định nghĩa bên trong phạm vi đó. Bạn không thể sử dụng nó bên trong 'myFunction' vì biến đó có phạm vi hoàn toàn khác. Tôi muốn gửi câu trả lời này, nhưng làm thế nào mà không ai trả lời câu hỏi này trong 35 phút? –

+0

U chỉ có thể gửi câu trả lời đó! Có cách nào để làm cho các biến "toàn cầu" trong JavaScript, tôi nghĩ vậy. Tôi cần tìm ra. Cảm ơn rất nhiều! – Sami

+0

Vâng, Bryan vừa làm một ví dụ. Tôi sẽ thêm một số câu trả lời của anh ấy và vì tôi hơi mệt mỏi khi đưa ra câu trả lời "hoàn chỉnh". ':)' –

Trả lời

10

temperature là địa phương để phạm vi của onDeviceReady chức năng. Đó là, khi chức năng kết thúc, nó biến mất.

Bạn có hai lựa chọn:

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

hay:

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

Đối với một danh sách tốt ví dụ về phạm vi chức năng, hãy thử this answer.

+0

[Đóng cửa javascript hoạt động như thế nào?] (Http://stackoverflow.com/questions/111102/how-do-javascript-closures-work) cũng là một tham chiếu tốt (mặc dù nó có nhiều hơn một chút độ sâu cho các chức năng phụ). –

+0

Cảm ơn cả hai! Về cơ bản tôi chưa bao giờ buộc phải sử dụng JavaScript, nhưng tôi không phải bắt đầu, nó ở khắp mọi nơi ... Nhân tiện, câu hỏi thứ hai của tôi, cách xử lý lưu trữ giữa các trang trong môi trường Windows? – Sami

+0

Một đóng có thể được sử dụng để lấy 'nhiệt độ' từ localStorage bên trong hàm' onDeviceReady' nếu bạn 'addEventListener' cho sự kiện' click' của nút bên trong hàm 'onDeviceReady' (thay vì viết' onclick' trong html) , nhưng đó có thể chỉ là những thứ phức tạp. @Sami Tôi không có kinh nghiệm với Windows Phone nên tôi sẽ để nó với Bryan. –

Các vấn đề liên quan