【问题标题】:Local storage not working issues with for loop本地存储无法使用 for 循环的问题
【发布时间】:2014-10-01 18:28:12
【问题描述】:

我正在使用本地存储来允许用户在提交表单后返回到表单,并使用保留的先前值进行修改。

我成功地使用了 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]); 

  }

}());

资源:

【问题讨论】:

  • $("#" + selectArray[i].change( => $("#" + selectArray[i]).change(
  • 我还没有修复它,但我认为我正在遭受循环内的功能。
  • 同样在更改事件中,您为什么要从 selectArray 中获取值?不应该从选择中获取吗?
  • @artm 感谢您的错字。将不得不考虑 select/selectArray。我的意图是像以前一样使用 id 来获取值。

标签: javascript jquery forms local-storage


【解决方案1】:

只需像这样更改更改事件处理程序,避免引用 i。变量 i 在这里晃来晃去。

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

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

这应该可行。

Example

【讨论】:

  • 非常感谢,我们成功了!
【解决方案2】:

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

【讨论】:

  • 不如把它当作评论。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-01
  • 2023-03-31
  • 2021-02-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多