本地存储无法与for循环一起工作

Local storage not working issues with for loop

本文关键字:for 循环 一起 工作 存储      更新时间:2023-09-26

我使用本地存储允许用户在表单提交后返回表单,并在保留以前值的情况下进行修改。

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

我打算使用jQuery.ech()函数,但首先想了解为什么我的循环不起作用。谢谢


(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]); 
  }
}());

资源:

  • jQuery v1.11.0
  • jQuery存储API

只需像这样更改更改事件处理程序,就可以避免引用i。变量i在这里被挂起。

$("#" + selectArray[i]).change(function() {
      var selectValue = $(this).val();
      storage.set($(this).attr('id'), selectValue);
});

这应该行得通。

示例

您是对的,在变更处理程序函数中,您引用了循环变量"i"。当实际调用更改处理程序时,"i"将被取消引用,并且始终包含最后一个值:selectArray.length