在网站的日常使用中,草稿保存是一个比较常见的功能,当用户在编辑表单时,可能需要跳到其他页面填写其他信息,也有可能发生一些其他的意外情况导致页面的资料丢失,使用jQuery和sessionStorage就可以实现简单的草稿保存功能。
在如何添加表单草稿保存功能时,有两个关键问题需要考虑,一是使用什么技术来实现草稿保存,二是草稿保存与实际存入数据库的时间点的逻辑关系。
sessionStorage可以帮助我们做到草稿保存的功能,在jQuery中有这样一个事件:blur(),该事件为失去焦点,即当我们点击了其他的页面标签时,就会触发这个事件。所以原理就是使用jQuery捕获blur事件,然后存入sessionStorage,当跳转回当前页面时,再将sessionStorage中存储的内容放回到对应的输入框中。
基础代码如下:
<script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"></script>
<!-- 第一个form表单,这个form表单中的input会使用sessionStorage进行草稿保存 -->
<form action="server.php" method="post">
<input type="text" id="input" name="msg" />
<input type="submit" name="submit" id="submit">
</form>
<!-- 第二个form表单,这个form表单中的input不会使用sessionStorage进行草稿保存 -->
<form method="post">
<input type="text" id="input2" name="msg2" />
<input type="submit" name="submit" id="submit2">
</form>
<a href="second.php">下一页</a>
<script>
//通过blur事件触发sessionStorage
$('#input').blur(function(){
var val=$('#input').val();
sessionStorage.setItem('msg',val);
});
//测试sessionStorage存储是否成功
var test = sessionStorage.getItem('msg');
console.log(test);
//当点击提交按钮时,将sessionStorage中的信息移除
$("#submit").click(function(){
sessionStorage.removeItem('msg');
});
//当网页加载时,将sessionStorage中的内容加载到对应的输入框中
$(document).ready(function(){
var val1=sessionStorage.getItem('msg');
$("#input").val(val1);
});
</script>
server.php是一个php文件,用来检测数据是否正常被提交。
second.php是一个php文件,用来跳转回当前页面。
页面初始效果是这样的:
在两个输入框中分别填入test和test1,然后点击下一页的链接再跳转回当前页面,或者直接点击浏览器的刷新,可以看到第一个输入框的test仍然存在,而第二个输入框的test已经丢失。
此时可以打开控制台查看,可以看到test被存储在了sessionStorage中。
在当前页面,再点击第一个输入框后面的提交按钮,可以看到server.php得到了提交的数据。
点击上一页跳转回之前页面,可以看到第一个输入框不再有test,打开控制台也可以看到sessionStorage中存储的信息已经被移除了。
到这里,就已经实现了一个简单的但是比较完整地表单草稿保存功能。
和sessionStorage类似的还有localstorage,sessionStorage会随着浏览器关闭,session被销毁而被清楚;但是localSorage会永久保存在本地。
使用sessionStorage也有一定的缺点,低版本的浏览器是不支持sessionStorage的,当然目前主流的浏览器绝大部分都是支持sessionStorage的;另一个缺点是当数据量很大时,存取速度会受到影响。