试图得到一个“快照”.一种形式,但我失去了价值
Trying to get a "snapshot" of a form but am losing the values
我有一个高度动态的表单,其中与顶层元素的交互将完全转换表单低层部分的元素。我想要一种简单的方法来维护状态,这样,如果用户在表单中部分地输入了顶级类别之一的数据,他们就可以切换到其他东西(暂时丢失他们键入的所有数据以及实际的输入元素),然后单击回到之前的顶级类别并恢复一切。
我计划做一些简单的事情,比如,在点击顶层元素时,做一些像:
form_state[category] = $('form').html();
category = this.val();
if (form_state[category]) {
$('form').html(form_state[category])
}
然而,我很快发现表单的html不包括用户与之交互的表单元素的值(它都是原始的默认值)。所以我意识到,我需要收集所有的表单内的元素的值,然后重置后,重置表单的内部html手动重置它们…所以我在想:
$('input, select, textarea').each(function(el) {
values.push($(el).val());
}
,然后重新遍历这些元素,并以如下方式更新元素:
if (form_state[category]) {
$('form').html(form_state[category])
$('input, select, textarea').each(function(el, i) {
$(el).val(values[i]);
}
}
但我只是想知道是否有人遇到过这样的事情之前,知道一个更好的解决方案比手动迭代这些?我想知道是否有任何方法来做一个反向形式。serialize()?这样我就可以存储一个序列化的表单快照,并用序列化的数据更新整个表单。由于. serize()返回一个转义字符串,似乎它可能比它的工作和手动迭代表单元素类型是一个更好的方式去…div ?
使用$('form').serializeArray()
代替,它将为您提供一个很好的JSON对象,您可以稍后使用它来重新填充表单。
您可能还想避免隐藏字段$('form :input:not(:hidden)').serializeArray()
我认为你可以在form_state[category] = $('form').html();
$("form input, form select").each(function(){
$(this).attr("value", this.value);
});
应该用当前值更新html select和input元素。然后你保存的html将反映当前用户的输入状态
相关文章:
- Windows8应用程序(html&Javascript):从图片库(除了文件选择器)显示图像的另一种方式
- 有没有一种方法可以添加相同的项目val=“0”;4〃;到JavaScript中数组的每个对象
- 有没有一种方法可以防止img get请求使用css或js发生
- Javascript,有没有一种方法可以将数组写成没有逗号或空格的单个文本字符串
- 从我的控制器返回一个不同于200的代码以触发ajax错误,这被认为是一种好的做法吗
- 有没有一种方法可以在控制台关闭的情况下让console.log()在IE中记录消息
- 有没有一种方法可以仅使用HTML/CSS来隐藏基于特定值的数据单元格
- 有没有一种方法可以从URL跟踪请求的域
- 有没有一种方法可以列出Ember.Object的所有绑定
- 有没有一种方法可以获得three.js的最小/lite版本
- 有没有一种方法可以在没有文档或jQuery的情况下使用javascript解码html实体
- ES6是否引入了一种机制来生成块范围的函数语句(而不是表达式)
- 有没有一种方法可以从Javascript检测特定的应用程序是否安装在(AndroidiOS)设备上
- 只能存储一种类型的对象的数组
- 在HTML/JavaScript中,有没有一种方法可以在图像开始加载时知道图像的最终布局尺寸
- 有没有一种方法可以在Javascript中进行可变递归currying
- 有没有一种方法可以检测ios<>使用jquery和触发器操作形成导航按钮
- 使用while循环+break是一种可接受的方式;goto;手术的结束
- 试图得到一个“快照”.一种形式,但我失去了价值
- 有没有一种方法可以防止JavaScript/jQuery中的元素失去焦点