如何记住一个表单是扩展的
How to remember a form is extended?
我在我的项目中有一个多步骤表单,其中的第一步有一个javascript扩展字段函数,用户可以在其中添加其他字段。如果用户进入下一步,数据当然会存储在Session中,直到最终提交。然而,扩展形式将不会被记住。如果用户从下一步返回,则不显示附加字段及其数据,更糟糕的是,如果附加字段中的数据无效,则用户不会看到它,因为消息显示在消失的字段下面(我使用Cakephp默认验证)。
是否有一种方法,比如在会话中存储设置,使其保持不变?
var counter = 0;
function moreFields(val1, val2, val3) {
counter++;
var newField = document.getElementById(val1).cloneNode(true);
newField.id = '';
newField.style.display = 'block';
var newFields = newField.querySelectorAll('[name], [id], [for], [data-display]');
for (var i=0;i<newFields.length;i++) {
var theNames = newFields[i].name
if (theNames)
newFields[i].name = "data[" + val3 + "][" + counter + "][" + theNames + "]";
var theNames2 = newFields[i].id;
if (theNames2)
newFields[i].id = theNames2 + counter;
console.log(newFields[i].id);
var theNames3 = newFields[i].htmlFor;
if (theNames3)
newFields[i].htmlFor = theNames3 + counter;
//console.log(newFields[i].htmlFor);
var theNames4 = newFields[i].dataset.display;
if (theNames4)
newFields[i].dataset.display = theNames4 + counter;
console.log(newFields[i].dataset.display);
}
var insertHere = document.getElementById(val2);
insertHere.parentNode.insertBefore(newField,insertHere);
}
<span id="readroot" style="display: none">
<div class="row">
<div class="col-lg-6">
<div class="form-group required">
<label for="Student1Grade">Grade</label>
<select name="grade" data-display="#display_student_1_grade" class="form-control" id="Student1Grade" required="required">
<option value="">Please Select</option>
<option value="1">Grade 1</option>
<option value="1">Grade 2</option>
</select>
</div>
</div>
<div class="col-lg-6">
<div class="form-group">
<label for="Student1Gender">Gender</label>
<select name="gender" data-display="#display_student_1_gender" class="form-control" id="Student1Gender">
<option value="1">Male</option>
<option value="2">Female</option>
</select>
</div>
</div>
</div>
<input class="btn btn-default" type="button" value="Remove" onclick="this.parentNode.parentNode.removeChild(this.parentNode);" /><br /><br />
</span>
<span id="writeroot"></span>
<input class="btn btn-default" type="button" onclick="moreFields('readroot', 'writeroot', 'Student')" value="Add Field" />
您需要为您的页面实现sessionStorage或localStorage。
localStorage
-存储没有截止日期的数据
sessionStorage
-存储一个会话的数据(当浏览器选项卡关闭时数据丢失)
在这里我只是张贴示例代码为您的帮助,通过它你可以做你想要的任务。你只需要遵循下面代码的逻辑概念,并在你的代码中实现。
也有一个只包含id
的示例,但您可以以其他方式实现它,这可以完全完成您的任务。
点击这里
相关文章:
- 铬扩展 :如何获取表单并填写并提交
- Chrome扩展表单保存错误
- 自动填写web表单-chrome扩展
- 提交Chrome扩展程序表单
- Extjs - 在行扩展器中选择一个表单
- jQuery 表单提交事件处理程序不会被调用(chrome 扩展)
- 如何获取表单提交弹出窗口的值.html chrome 扩展
- 如何使Chrome扩展中的表单只显示一次
- Chrome扩展-点击清除表单文本
- 翻译Google Chrome扩展HTML表单
- 如何构建一个扩展,以保存HTML表单的值到电子表格使用应用程序脚本
- 在Chrome内容扩展中拦截表单提交
- 在chrome扩展中使用jquery填写表单时出错
- Chrome扩展表单输入文本是空白提交
- 验证表单输入类型url的扩展
- 扩展一个表单的高度以适应表单中的内容
- 如何记住一个表单是扩展的
- Qlikview +扩展.如何使用JS更改表单
- 试图创建一个chrome扩展,将从浏览器选项卡a复制数据,并填写在浏览器选项卡B上的表单
- 如何不允许用户在扩展表单javascript函数中删除原始表单