Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用窗体的当前状态序列化和反序列化窗体_Javascript_Jquery_Dom_Serialization_Webforms - Fatal编程技术网

Javascript 使用窗体的当前状态序列化和反序列化窗体

Javascript 使用窗体的当前状态序列化和反序列化窗体,javascript,jquery,dom,serialization,webforms,Javascript,Jquery,Dom,Serialization,Webforms,我有这张表格 <form id=my_form> <input id=mt type=text><input id=mc type=checkbox><textarea id=mta /> </form> 我希望在其他地方有一个按钮,它可以序列化表单及其状态,也就是说,如果textarea有内容,或者文本有内容,或者按下复选框,我希望该信息以某种方式存储在字符串中。稍后,我想使用该字符串恢复表单中的信息 我尝试了.inn

我有这张表格

<form id=my_form>
    <input id=mt type=text><input id=mc type=checkbox><textarea id=mta /> 
</form>

我希望在其他地方有一个按钮,它可以序列化表单及其状态,也就是说,如果textarea有内容,或者文本有内容,或者按下复选框,我希望该信息以某种方式存储在字符串中。稍后,我想使用该字符串恢复表单中的信息

我尝试了.innerHTML,但它不起作用,我总是得到原始的HTML

我还研究了jQuery的serialize方法,但我无法在表单的“内部”对其进行反序列化

提前谢谢你


库尔特

我给你举了一些例子。测试-工作良好。
您需要
jQuery

首先是表格:

<form id="my_form">
    <input id="formText" type="text" name="formText" />
    <br />
    <label><input id="formCheck" type="checkbox" name="formCheck" /> check 1</label>
    <br />
    <label><input id="formCheck2" type="checkbox" name="formCheck2" /> check 2</label>
    <br />
    <textarea name="formTextarea" id="formTextarea" cols="20" rows="3"></textarea> 
    <br />

    <label><strong>Time unit</strong>:</label>
    <p>
        <label><input type="radio" name="dataView" value="week" checked="checked" /> Week</label>
        <label><input type="radio" name="dataView" value="month" /> Month</label>
        <label><input type="radio" name="dataView" value="year" /> Year</label>
    </p>


    <input type="button" value="Serialize" onclick="serializeForm()" />
    <input type="button" value="Unserialize" onclick="restoreForm()" />

</form>

name
表单元素中缺少属性。这对我来说很好,但是我有一个问题,空格作为加号返回。我用……'把它修好了代码“$”(“输入[type='text']”).val()。替换(/\+/g,+;);formData=$(“#我的表单”).serialize().replace(/\+/g,”).replace(/\%2B/g,“+”);'代码'
<script type="text/javascript">

    var formData;            

    function  serializeForm() {
        formData = $('#my_form').serialize();
    }           

    function restoreForm() {
        var obj = unserializeFormData(formData);

        // Restore items one by one
        if(obj.hasOwnProperty('formTextarea')) {
            $('#formTextarea').val(obj.formTextarea);
        }

        if(obj.hasOwnProperty('formText')) {
            $('#formText').val(obj.formText);
        }

        // Radio buttons
        if(obj.hasOwnProperty('dataView'))
            $('input[value="'+obj.dataView+'"]').attr('checked', true);


        // Restore all checkbox. You can also iterate all text fields and textareas together, because the have same principle for getting and setting values by jQuery 
        $('#my_form input[type="checkbox"]').each(function(){
            var checkName = $(this).attr('name');
            var isChecked = false;
            if(obj.hasOwnProperty(checkName))
                isChecked = true;
            $(this).attr('checked',isChecked); 
        });

    }            


    function unserializeFormData(data) {
        var objs = [], temp;
        var temps = data.split('&');

        for(var i = 0; i < temps.length; i++){
            temp = temps[i].split('=');
            objs.push(temp[0]);
            objs[temp[0]] = temp[1]; 
        }
        return objs; 
    }

</script>