2012-07-09 77 views
1

我正在處理由HTML5本地存儲器保存的表單。Javascript:創建動態變量和對象名稱。/html5 localstorage

當按下保存:

function saveAll(){ 
    var field1 = document.getElementById('field1').value; 
    localStorage.setItem('con_field1',field1); 
    var field2 = document.getElementById('field2').value; 
    localStorage.setItem('con_field2',field2); 
    var field3 = document.getElementById('field3').value; 
    localStorage.setItem('con_field3',field3); 
    var field4 = document.getElementById('field4').value; 
    localStorage.setItem('con_field4',field4); 
    var field5 = document.getElementById('field5').value; 
    localStorage.setItem('con_field5',field5); 
    var field6 = document.getElementById('field6').value; 
    localStorage.setItem('con_field6',field6); 
} 

和加載頁面(填寫表格)時:

function ShowAll() { 
    var field1 = localStorage.getItem('con_field1'); 
    document.conditioning.field1.value = field1; 
    var field2 = localStorage.getItem('con_field2'); 
    document.conditioning.field2.value = field2; 
    var field3 = localStorage.getItem('con_field3'); 
    document.conditioning.field3.value = field3; 
    var field4 = localStorage.getItem('con_field4'); 
    document.conditioning.field4.value = field4; 
    var field5 = localStorage.getItem('con_field5'); 
    document.conditioning.field5.value = field5; 
    var field6 = localStorage.getItem('con_field6'); 
    document.conditioning.field6.value = field6; 
} 

這一切工作正常,但我想更重新寫這個花式和高效的方式。我在想這樣的事情:

function ShowAll() { 
    var field = []; 
    for (i=0; i<6; i++) { 
    field[i] = localStorage.getItem(window['con_field' + i]); 
    document.purpose.field[i].value = window['con_field' + i] 
    } 
} 

但是瀏覽器不喜歡這個。基本上我需要創建一個循環,自動將「字段」名稱更改爲「field1,field2,field3」等。窗口工作正常,但我錯誤地使用了它。

任何人有想法?

非常感謝!

回答

0

我會嘗試document.purpose["field" + i].value = window['con_field' + i]

1

它看起來像你的主要問題是,字段建立索引以1開頭,但這個0.1

你的循環索引?

var field = []; 
for (i = 1; i <= 6; i++) 
{ 
    field[i] = localStorage.getItem(window['con_field' + i]); 
    document.purpose.field[i].value = window['con_field' + i] 
} 

而且,我不是這個100%,但我認爲使用document.getElementByID更跨瀏覽器比使用window對象括號標記兼容的,但因爲我寫普通的香草JS它已經有一段時間,所以不要引用我。

+0

我建議重命名錶單項目,從零開始的邏輯是更爲常見。 – Bergi 2012-07-09 17:23:02

2

您應該將所有數據添加到一個對象,然後將其字符串化,然後將其添加到單個鍵下的本地存儲中。

加載它時,抓住一個本地存儲項目,解析它,然後訪問該對象上的屬性。

例如

var save = function() { 
    var data = { 
     foo: 'bar' 
    }; 

    localStorage.setItem('myData', JSON.stringify(data)); 
}; 

var load = function() { 
    var data = JSON.parse(localStorage.getItem('myData')); 

    var someProp = data.foo; // gives you 'bar' 
}; 
2
function showAll(t1,c1,d1) { 
    var field1 = localStorage.getItem('con_field1'); 
    console.log(field1) 
    var field2 = localStorage.getItem('con_field2'); 
    var field3 = localStorage.getItem('con_field3'); 
} 
+0

這看起來不像一個答案,而是像一個片段的想法。 – 2016-10-07 13:00:31