【问题标题】:Populate HTML form with data saved on Local Storage使用保存在本地存储中的数据填充 HTML 表单
【发布时间】:2016-07-20 20:13:58
【问题描述】:

我的应用程序将填写的表单数据(带有 ID 和值的输入字段)保存到本地存储,甚至成功加载它们,将解析后的 ID 和值重新分开。

问题是,一旦页面重新加载,我无法从已保存到本地存储的数据中预先填写表单备份。保存的数据保留在浏览器的资源中,控制台记录每个输入字段的正确值。但是,页面本身没有显示任何内容。

这是我的 HTML 结构的示例:

<form id="myForm" method="post">
   <input type="submit" onclick="dataSave();" value="Save">
   <input class="formField" type="checkbox">Task done!
   <input class="formField" type="text">How it went?
</form>

这是执行保存和加载到本地存储的当前 JavaScript:

if (typeof(Storage) !== "undefined"){
    
    // Loading data
    function dataLoad(){
        var inputParse = JSON.parse(localStorage.getItem('fieldString'));
        var inputId;
        var inputValue;
        var inputType;

        $.each(inputParse, function(key, value){
            inputId = key;
            inputValue = value;

            if (inputValue === "true" || inputValue === "false"){
                inputType = inputValue;
            }
        });

      
        $(".formField").each(function(){
            inputId = this.id;
            document.getElementById(inputId);
 
            if (inputType === "true"){
                $(inputId).attr("checked", "checked");
            } else {
                $(inputId).val(inputValue);
            }
        });
    }
    
    // Saving data
    function dataSave(){
        var mngrFields = {};
        
        $(".mngr-field").each(function(){
            if (this.type == "radio" || this.type == "checkbox"){
                mngrFields[this.id] = this.checked;
            } else {
                mngrFields[this.id] = this.value;
            }
        });
        localStorage.setItem('fieldString', JSON.stringify(mngrFields));
    }

要在页面加载后运行dataLoad(),我的$(document).ready(function(){ }); 中有一个简单的dataLoad();

我怎样才能用保存的数据填写表格?我尝试了一些document.GetElementById 的解决方法,但没有成功。

【问题讨论】:

  • 也许您应该使用$('#'+inputId) 而不是$(inputId),假设您只保存id 而没有前面的#
  • 感谢您的关注!完全错过了。但是,它仍然没有加载表单的数据。 :(
  • 你能显示console.log(inputParse);的输出吗?了解如何保存数据会很有帮助。因为如果数据被正确插入到相应的输入类型,填充字段应该足够简单。
  • inputParse 只返回[object Object] 作为回报,这是因为内容保存到本地存储吗?在本地存储中,fieldString 键的值如下:{"payment_type_mngr_1_01":false,"payment_type_mngr_1_02":"90%","payment_type_mngr_1_03":true,"payment_type_mngr_1_04":false,"payment_type_mngr_1_06":false,"payment_type_mngr_1_07":false,"payment_type_mngr_1_08":false,"payment_type_mngr_1_10":false,"payment_type_mngr_1_11":false,"payment_type_mngr_1_12":"0%"}

标签: javascript jquery forms local-storage


【解决方案1】:

任务很简单:

  • 获取 localStorage 内容(但首先检查是否存在);
  • 对于每个存储的 ID,检查 DOM 中的 HTML 类型(因为您从当前的 localStorage 对象中不知道它);
  • 为其赋值或选中属性(如果是单选框/复选框);

原来是这样:

function dataLoad() {
    if (localStorage.getItem('fieldString') !== null) {
        var inputParse = JSON.parse(localStorage.getItem('fieldString'));
        $.each(inputParse, function (key, value) {
            var field = document.getElementById(key);
            if(field.type == 'radio' || field.type == 'checkbox'){
                field.checked = value;
            }else{
                field.value = value;
            }
        });
    }
}

您可以在加载文档时自动调用该函数,或将其分配给某个按钮(如保存操作)——这取决于您。

祝你好运!

【讨论】:

  • 太棒了!不过有一个问题;我有 jQueryUI 滑块(基本上使用文本字段来表示值)不会加载以显示它们的值。我可以找到存储在本地存储中的数据,但它没有加载。尝试为dataLoad(); 设置超时,但它只显示文本值而不移动滑块本身。关于什么可能导致这个/什么可以解决它的任何想法?
  • 好吧,我需要查看该代码以回答其余代码应如何与该滑块进行迭代。我很确定这是一些额外的函数调用或初始化的问题,以便该滑块在数据填充后变得活跃,但如果没有一些代码行就不能再说什么了。
  • 但最好关闭该主题(如果您的问题已解决)并打开新主题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-03
  • 2018-04-22
  • 1970-01-01
  • 2018-10-05
  • 1970-01-01
  • 1970-01-01
  • 2018-07-24
相关资源
最近更新 更多