- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个巨大的表单,其中包含大量 输入、文本区域和复选框。表格上有一个验证码。我想用 localStorage
在本地保存表单答案,这样如果验证码返回 fail
,他们的表单数据将被重新填充。
HTML
<form name="wellnessForm" id="wellnessForm" action="confirm.php" method="POST">
<input type="text" name="firstName" />
<br/>
<input type="checkbox" name="noConcernsChk[]" value="1" />
<input type="checkbox" name="noConcernsChk[]" value="2" />
<br/>
<textarea>
</textarea>
</form>
jQuery
// DOM ready
$(function(){
$(':text').blur(function(e){
localStorage.setItem("flag", "set");
var data = $('#wellnessForm').serializeArray();
$.each(data, function(i, obj){
localStorage.setItem(obj.name, obj.value);
});
});
$(':checkbox').click(function(e){
localStorage.setItem("flag", "set");
var data = $('#wellnessForm').serializeArray();
$.each(data, function(i, obj){
localStorage.setItem(obj.value, e.checked);
});
});
// test if there is already saved data
if( localStorage.getItem("flag") == "set" ){
var data = $("#wellnessForm").serializeArray();
// have to select the valid inputs based on their name attribute
$.each(data, function(i, obj){
// check if checkbox
if(obj.name == 'noConcernsChk[]'){
$( "[value='"+obj.value+"']:checkbox" ).prop('checked', true);
}
else{
$("[name='" + obj.name + "']").val(localStorage.getItem(obj.name));
}
});
}
// provide mechanism to remove data (TODO: remove actual data not just kill the flag)
$("#clearData").click(function(e){
e.preventDefault();
localStorage.setItem("flag", "");
});
});
我走了多远
正如您在我的示例中看到的那样,我的文本输入工作正常。但是我被困在复选框上。我想让 localStorage
记住这些框是否被选中,如果是,则在表单中为用户重新选中它们。我还没有让 textarea 工作,但这应该不会太难。
问题
如何将复选框状态存储到本地存储,然后调用它(并选中适当的复选框)?
最佳答案
localStorage 只能存储字符串值。
首先,你必须序列化数据使用jQuery.serialize , 然后你可以像这样存储它
localStorage['data']=$('form').serialize()
编辑
为了恢复,你已经制定了一些规则。在标签中添加data-binding
,将表单值保存为键/值对,键是data-binding
,然后你可以恢复它。
像这样
var data = {};
$('[data-binding]')
.each(function(){ data[$(this).data('binding')] = $(this).serialize(); })
localStorage['data'] = JSON.stringify(data);
恢复
var data = JSON.parse(localStorage['data']);
$('[data-binding]')
.each(function()
{
// handle the set value
// need consider the different value type for different field type
var $this = $(this);
var val = data[$this.data('binding')];
// for chechbox
if($this.is('[type=checkbox]'))
$this.prop('checked',val)
// for others
else
$this.val(val);
})
我的代码中的示例:
// u5 = utils
U5 = {};
/**
* 加载配置到界面,data-setting属性指定setting项
* @param setting
*/
U5['LoadSettingToUI'] = function (setting)
{
$('[data-setting]')
.each(function()
{
var $this = $(this);
var val;
val = setting[$this.data('setting')];
// 根据不同的类型进行值的转换 for jquery mobile
if($this.is('select[data-role=slider]'))// 这里没有使用jqmData来判断,考虑兼容问题
{
$this.val(val?'on':'off');
}else if($this.is('[type=checkbox]'))
{
$this.prop('checked',!!val);
}else{
$this.val(val);
}
});
};
/**
* 从页面获取配置,data-setting属性指定setting项
* @return {object}
*/
U5['GetSettingFromUI'] = function ()
{
var setting = {};
$('[data-setting]').each(function()
{
var $this = $(this);
/**
* @type {string|boolean}
*/
var val;
val = $this.val();
// 根据不同的类型进行值的转换
if(/^on|off$/.test(val))
{
val = val === 'on';
}else if($this.is('[type=checkbox]'))
{
val = $this.prop('checked');
}
//
setting[$this.data('setting')] = val;
});
return setting;
};
完整演示 here
关于javascript - 如何使用 localStorage 保存表单数据(文本、文本区域和复选框)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18856272/
我是 Angular 新手。使用 $localstorage(ngStorage) 是否有任何特定的原因而不是常规的 javascript localstorage 有什么区别。 谁能给我解释一下吗?
这个问题说明了一切。我意识到所有选项都可以在最新的浏览器中使用,但是语义上最好的选择是什么?为什么? 最佳答案 根据 W3C 标准,正确的是 window.localStorage,因为 localS
我想不出一个好的标题,所以希望可以。 我正在做的是创建一个离线 HTML5 webapp。 “出于某些原因”我不希望将某些文件放在缓存 list 中,而是希望将内容放在 localStorage 中。
我最近问了a question about LocalStorage .使用 JSON.parse(localStorage.item) 和 JSON.parse(localStorage['item
我最近问了a question about LocalStorage .使用 JSON.parse(localStorage.item) 和 JSON.parse(localStorage['item
我最近问过a question about LocalStorage 。使用 JSON.parse(localStorage.item) 和 JSON.parse(localStorage['item
我在将本地存储的定价添加到其他字段时遇到问题。如果我将 beforeNoonNPSlot 的价格设置为 2,但我将 matineeNPSlot 的字段留空(它应该保留分配给的任何价格)最后)。然后在我
我需要从 localStorage 对象变量中删除对象键而不从 localStorage 中删除键 let obj = localStorage; let keys = Object.keys(loc
根据我所读到的内容,我希望以下代码能够工作。 此代码是函数的一部分,该函数应该通过用下一个更高的 localStorage 变量覆盖它来删除 localStorage 变量。一旦没有更多内容可供复制,
这个问题已经有答案了: 已关闭10 年前。 Possible Duplicate: JavaScript property access: dot notation vs. brackets? 我是
编写localStorage['key'] = value或localStorage.setItem('key', value)有区别吗? 我看到了this question标记为重复,但在开发人员工
我一直在做以下事情: var store = window.localStorage; store.setItem() 但现在我看到代码是这样做的: localStorage.setItem() 两者
我在 Chrome 上遇到此错误。不知道为什么会发生。任何帮助!我正在使用 Backbone.localStorage 插件和 Backbone。我在以下行中收到错误: localStorage: B
如果我尝试以下代码: var c = new Backbone.Collection(); c.localStorage = new Backbone.LocalStorage("items");
我想使用 localStorage 存储用户输入值,然后在倒计时器中使用该值。 这是用户输入数据的 HTML: Work Time
我有一个适用于 Mac 和 Linux 用户但不适用于 Windows 用户的 Chrome 扩展程序。当我进入控制台并在 localStorage 中设置一个项目时,它工作正常,但是当用户尝试使用扩
在这里浏览所有问题/答案,但找不到解决我的问题的方法。条件('localStorage' in window)返回 true但是 localStorage 的对象本身仍然是 undefined . 设
使用下面的代码,我创建一个 localstorage 变量,如果未定义,则其键为 quote = 1。然而,当最终使用相同的引号键再次调用它时,即使使用了 Number() 函数,它也会变成 11 而
我上次检查时,以下两行返回 true: null == localStorage["foo"]; null == localStorage.getItem("foo"); 将 null 替换为 und
我正在尝试在 NextJS 静态站点上使用 localStorage,但遇到 localStorage 未定义错误。 我的错误显示组件的代码是: export default function Cat
我是一名优秀的程序员,十分优秀!