2014-10-01 47 views
0

我正在使用本地存储以允许用户在提交之后返回到表单,并修改之前保留的值。本地存储没有for循环工作问题

我成功地使用jQuery的存储API(对于set()和get()),但只写出每一个表单元素的长手,并不理想。相反,我想要将所有表单元素标识符都推送到一个数组,并遍历数组。第一部分,推动阵列,就像一个魅力,但我使用的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]); 

    } 

}()); 

资源:

+0

$(“#”+ selectArray [i] .change(=> $(“#”+ selectArray [i ])。change( – artm 2014-10-01 09:56:00

+0

我还没有修复它,但认为我在循环中受到函数的影响 – Len 2014-10-01 09:57:28

+0

也是在更改事件中,为什么要从selectArray中取值?是不是应该从select中取出? – artm 2014-10-01 09:57:37

回答

1

只是改改事件处理这样,避免我参考。变量我正在这里摆动。

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

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

这应该起作用。

Example

+0

Muchas gracias,我们已经成功! – Len 2014-10-01 11:05:35

0

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

+1

反而把它作为评论。 – SSA 2014-10-01 10:27:32