formStorage 基于jquery的一个插件(存储表单中元素的状态到本地)


Posted in Javascript onJanuary 20, 2012

原理很简单,通过本地存储机制(userData或者localStorage),存储表单中元素的状态到本地. 需要时可以把所存储的状态还原到表单元素上.

其中也用了json数据格式, 之前想对插件中所需的功能,从零开始写,但是觉得太冗余,没必要.就基于另外2个plugin现实.

分别是:jquery.json 和 jStorage. 这两个插件本身实用小巧, api简单易用, 其中jStorage在老一点的浏览器(不支持原生JSON操作)中需要用到jquery.json或者json2

formStorage对jQuery对象扩展了3个方法, 对非form标签无效.

存储时调用: $('#myform').formStore(/*excludes*/), 此方法可以传入一个包含表单元素id的数组,指定哪些元素状态不需要存储

还原时调用: $('#myform').formRestore()

清除存储调用: $('#myform').destroyStore(), 之后在调用formRestore将不起作用, 因为对应的本地存储数据已经删除

NOTE: 为了还原时能定位元素, form和其表单元素都需要给予id, 保存时以form的id做为key, 所有表单元素的状态组织成一个json串做为value.

其中input的type如果为button, file, submit, reset, password, image中的其中一个, 该标签的状态不会被存储. 如果表单中有textarea,而且文本内容较大,

不建议实用, 尤其在IE6,7中.

下面是一张各个浏览器本地存储容量的参考图(来自jStorage的主页):

formStorage 基于jquery的一个插件(存储表单中元素的状态到本地)

好吧, 貌似图里面的浏览器老了点...

下面是个简单的实例:

<form id="myform" action=""> 
<input id="name" name="name" type="text" value="" /> 
<input id="password" name="pwd" type="password" value="" /> 
<input type="checkbox" name="checkname" id="check1" value="checkvalue1" /> 
<input type="checkbox" name="checkname" id="check2" value="checkvalue2" /> 
<input type="radio" name="radioname" id="radio1" value="radiovalue1" /> 
<input type="radio" name="radioname" id="radio2" value="radiovalue2" /> 
<select name="selectoptions" id="select1"> 
<option value="option0">option0</option> 
<option value="option1">option1</option> 
<option value="option2">option2</option> 
<option value="option3">option3</option> 
</select> 
<textarea name="area" id="area" cols="30" rows="10"> 
</textarea> 
<button type="button" id="store">store</button> 
<button type="button" id="restore">restore</button> 
<button type="button" id="destroy">destroy</button> 
</form>

实例中对应的js如下:
$('#store, #restore, #destroy').on('click', function() { 
if(this.id == 'store') 
$('#myform').formStore(); 
else if(this.id == 'restore') 
$('#myform').formRestore(); 
else 
$('#myform').destroyStore(); 
});

最后, 如果你感兴趣, 可以下载此插件(点击下载formStorage), 解压后, 直接运行里面的test.html即可, 源码没有压缩. 因为时间较短, 或许有不够完善的地方, 欢迎留言讨论.
Javascript 相关文章推荐
基于jquery的从一个页面跳转到另一个页面的指定位置的实现代码(带平滑移动的效果)
May 24 Javascript
jQuery源码中的chunker 正则过滤符分析
Jul 31 Javascript
JavaScript设计模式之建造者模式介绍
Dec 28 Javascript
javascript实现 百度翻译 可折叠的分享按钮列表
Mar 12 Javascript
js实现无限级树形导航列表效果代码
Sep 23 Javascript
JS组件Bootstrap ContextMenu右键菜单使用方法
Apr 17 Javascript
jQuery前端开发35个小技巧
May 24 Javascript
修改jquery中dialog的title属性方法(推荐)
Aug 26 Javascript
BootStrap table使用方法分析
Nov 08 Javascript
微信小程序progress组件使用详解
Jan 31 Javascript
灵活使用console让js调试更简单的方法步骤
Apr 23 Javascript
JS常见面试试题总结【去重、遍历、闭包、继承等】
Aug 27 Javascript
json的前台操作和后台操作实现代码
Jan 20 #Javascript
Prototype源码浅析 Enumerable部分(二)
Jan 18 #Javascript
JS中的public和private对象,即static修饰符
Jan 18 #Javascript
DOM 中的事件处理介绍
Jan 18 #Javascript
深入理解JavaScript系列(13) This? Yes,this!
Jan 18 #Javascript
JavaScript中常用的运算符小结
Jan 18 #Javascript
jQuery LigerUI 使用教程表格篇(1)
Jan 18 #Javascript
You might like
php实现的九九乘法口诀表简洁版
2014/07/28 PHP
thinkphp文件处理类Dir.class.php的用法分析
2014/12/08 PHP
详解PHP对数组的定义以及数组的创建方法
2015/11/27 PHP
PHP文件缓存smarty模板应用实例分析
2016/02/26 PHP
javascript下操作css的float属性的特殊写法
2007/08/22 Javascript
javascript修改IMG标签的src问题
2014/03/28 Javascript
JavaScript常用脚本汇总(二)
2015/03/04 Javascript
JavaScript中的small()方法使用详解
2015/06/08 Javascript
jquery实现可自动收缩的TAB网页选项卡代码
2015/09/06 Javascript
JavaScript_object基础入门(必看篇)
2016/06/13 Javascript
jQuery利用sort对DOM元素进行排序操作
2016/11/07 Javascript
vue.js中过滤器的使用教程
2017/06/08 Javascript
Vue单文件组件的如何使用方式介绍
2017/07/28 Javascript
Angular动画实现的2种方式以及添加购物车动画实例代码
2018/08/09 Javascript
JS使用JSON.parse(),JSON.stringify()实现对对象的深拷贝功能分析
2019/03/06 Javascript
JS html事件冒泡和事件捕获操作示例
2019/05/01 Javascript
微信小程序 image组件遇到的问题
2019/05/28 Javascript
nodejs读取图片返回给浏览器显示
2019/07/25 NodeJs
基于Angular 8和Bootstrap 4实现动态主题切换的示例代码
2020/02/11 Javascript
使用JS实现动态时钟
2020/03/12 Javascript
Python urlopen()函数 示例分享
2014/06/12 Python
使用相同的Apache实例来运行Django和Media文件
2015/07/22 Python
八大排序算法的Python实现
2021/01/28 Python
python读取oracle函数返回值
2016/07/18 Python
解决Python中回文数和质数的问题
2019/11/24 Python
基于python求两个列表的并集.交集.差集
2020/02/10 Python
Python多线程thread及模块使用实例
2020/04/28 Python
在家更换处方镜片:Lensabl
2019/05/01 全球购物
什么叫应用程序域?什么是托管代码?什么是强类型系统?什么是装箱和拆箱?什么是重载?CTS、CLS和CLR分别作何解释?
2012/05/23 面试题
煤矿班组长的职责
2013/12/25 职场文书
信息专业学生学习的自我评价
2014/02/17 职场文书
工作鉴定评语
2014/05/04 职场文书
授权委托书(公民个人适用)
2014/09/19 职场文书
银行领导班子四风对照检查材料
2014/09/27 职场文书
民事二审代理词
2015/05/25 职场文书
首席执行官观后感
2015/06/03 职场文书