Php jQuery:使用值存储动态表单,并在返回时重新加载按钮

Php jQuery:使用值存储动态表单,并在返回时重新加载按钮,php,jquery,html,forms,dom,Php,Jquery,Html,Forms,Dom,我一直在谷歌上搜索这个独特的问题,但并没有找到确切的解决方案 我有一个基本的表单,有X个输入。在表单中的某个点,用户可以根据需要通过单击按钮自由添加输入。当他们提交表单时,它会转到另一个页面来收集发布的表单数据,但我希望用户能够在提交失败时单击“返回”(或以编程方式将其发送回) 在通过javascript提交之前,我有错误检查设置,但还有其他事情(比如PHP邮件程序)可能会失败,我希望他们能够重新提交数据 当然,问题是当浏览器单击返回时,它最多会用输入数据刷新DOM中的初始表单,但我会丢失所有动

我一直在谷歌上搜索这个独特的问题,但并没有找到确切的解决方案

我有一个基本的表单,有X个输入。在表单中的某个点,用户可以根据需要通过单击按钮自由添加输入。当他们提交表单时,它会转到另一个页面来收集发布的表单数据,但我希望用户能够在提交失败时单击“返回”(或以编程方式将其发送回)

在通过javascript提交之前,我有错误检查设置,但还有其他事情(比如PHP邮件程序)可能会失败,我希望他们能够重新提交数据

当然,问题是当浏览器单击返回时,它最多会用输入数据刷新DOM中的初始表单,但我会丢失所有动态添加的输入

我希望在会话中捕获表单/数据,并让它使用用户在单击“上一步”时创建的提交版本重新填充DOM

我最近一次是在提交时做这样的事情:

var theForm = $('#myForm');
sessionStorage.setItem('formData', JSON.stringify(theForm.clone(true).html().toString());
在回发/单击上一步时:

$('#myForm').replaceWith(JSON.parse(sessionStorage.getItem("formData")));

这里的问题是我得到我的表格,但不是数据!我是否需要迭代每个输入以将数据放回重新创建的表单中??当
.clone(true)
ed时,为什么它不抓取数据?

以下是我最终得到的答案

表单验证后,我将会话设置为保存表单数据,如下所示:

    var theForm = $('#MyForm');
    sessionStorage.setItem('formHTML', JSON.stringify(theForm.clone(true).html()));

    theForm.find('input,select,textarea').each(function(){
        sessionStorage.setItem(this.name,this.value);
    });
然后,当DOM再次加载时,我会检查会话并用数据填充表单(如果存在):

  $(document).ready(function(){

        if (sessionStorage.getItem("formHTML")) {
            $('#MyForm').html($.parseJSON(sessionStorage.getItem("formHTML")));
        }

        $('#MyForm').find('input,select,textarea').each(function(i,elem){
            var sessItem = elem.name, sessValue = '';
            if (sessValue = sessionStorage.getItem(sessItem)) {
                if(elem.type=='radio' && elem.value==sessValue){
                    alert(elem[i].type+' has value of "'+elem[i].value+'"');
                    $('[name='+sessItem+']')[i].prop('checked',true);
                }
                else if(elem.type=='textarea'){
                    alert(elem.type);
                    $('[name='+sessItem+']').val(sessValue);
                }
                else
                {
                    $('[name='+sessItem+']').val(sessValue);
                }
            }

        });
    });

单击“上一步”按钮通常会返回一个缓存页面,在这种情况下,该页面可能与您的问题有关。您是否可以尝试在会话中存储当前日期时间的相同过程,并尝试按“上一步”按钮提醒它?你会发现这是否是你的问题。我想指出的是,我现在不知道你的对象sessionStorage背后是什么…“sessionStorage”从HTML5开始就可用,在这个对象中,我正在克隆表单
$(“#myForm”)
。通过上面概述的过程,我可以获取所有动态添加的输入,但无法获取这些输入中的数据。