1

HTML5 ローカル ストレージによって保存されるフォームに取り組んでいます。

保存を押すと:

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」などに自動的に変更するループを作成する必要があります。ウィンドウは機能していますが、使い方が間違っています。

誰にもアイデアがありますか?

どうもありがとう!

4

4 に答える 4

3
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');
}
于 2016-10-07T12:39:47.437 に答える
2

すべてのデータを 1 つのオブジェクトに追加し、それを文字列化してから、単一のキーでローカル ストレージに追加する必要があります。

ロードするときは、1 つのローカル ストレージ アイテムを取得して解析し、オブジェクトのプロパティにアクセスします。

例えば

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'
};
于 2012-07-09T17:23:17.757 に答える
1

主な問題は、フィールドのインデックスが 1 から始まることですが、ループのインデックスは 0 から始まるようです。

これはどうですか?

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 を書いてからしばらく経っているので、引用しないでください。

于 2012-07-09T17:20:56.673 に答える
0

私は試してみdocument.purpose["field" + i].value = window['con_field' + i]ます。

于 2012-07-09T17:20:46.970 に答える