本地存储不能解决for循环问题

时间:2014-10-01 09:52:29

标签: javascript jquery forms local-storage

我正在使用本地存储空间来允许用户在提交表单后返回表单并使用之前的值保持修改。

我成功地使用了jQuery Storage Api(用于set()和get()),但只是为每个表单元素写出了长手,不理想。相反,我想将所有表单元素id推送到数组并循环遍历数组。第一部分,推到阵列,就像一个魅力,但我使用的for循环不起作用。

我打算使用jQuery .each()函数,但想要了解为什么我的循环不能先工作。感谢。


(function() {

  var selectArray = [];

  // Getting select ids
  $("select").each(function() {
    selectArray.push($(this).attr("id"));
  });

  // Using Local Storage Api
  var storage = $.localStorage;

  for (var i = 0; i < selectArray.length; i++){

    // Get select element
    $("#" + selectArray[i]).val(storage.get(selectArray[i]));

    // Set select element
    $("#" + selectArray[i]).change(function() {
      var selectValue = $("#" + selectArray[i]).val();
      storage.set(selectArray[i], selectValue);
    });

    // Check loop is working
    console.log(i + ". " + selectArray[i]); 

  }

}());

资源:

2 个答案:

答案 0 :(得分:1)

只需像这样更改更改事件处理程序,避免引用i。变量我在这里被悬空了。

$("#" + selectArray[i]).change(function() {

      var selectValue = $(this).val();
      storage.set($(this).attr('id'), selectValue);
});

这应该有用。

Example

答案 1 :(得分:0)

你说得对,在改变处理函数里面你引用了循环变量&#39; i&#39;。当实际调用更改处理程序时,&#39; i&#39;被取消引用并始终包含最后一个值:selectArray.length