应用场景:
1.填入表单内容有不同验证规则,提交表单会进行相应规则验证,通过验证才存;
2.读取历史记录的时候,根据验证规则筛选,只读取适合相应规则的历史记录数据;
3.以localStorage存储为主,如果localStorage失效(App中localStorage可能会出现失效场景),则启用cookie存取(这里用了js.cookie.js插件方便操作cookie);
贴出代码:
html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> <style> *, body{margin: 0;padding:0;} .box{ 240px; margin: 100px auto;} .username-box{height: 200px;} .username{100%; height: 24px;text-indent:12px;border: 1px solid #ccc;border-radius:4px;} .submit{ 100%; height:30px;color:#fff;background: #4496e9;border:1px solid #4496e9;border-radius: 4px;} .account-label{float: left} .account-box{ position: relative; 180px;float: left;} .history-account{ display: none; 100%; background: #fff; border-top:0; border-bottom-left-radius: 8px; border-bottom-right-radius: 8px; position: absolute; top:26px; left: 0; z-index: 9; box-shadow: 0px 2px 1px 2px rgba(0,0,0,0.05); } .history-account>li{ display: block; 100%; height:30px; line-height: 30px; text-align: center; box-shadow: inset 0px -1px 1px -1px rgba(0,0,0,0.05); position: relative; cursor:pointer; } .history-account>li:nth-child(2n+1){background: #f1f1f1} .history-account>li:last-child{border-bottom-left-radius: 8px;border-bottom-right-radius: 8px} .remove{ 10px; height: 10px; position: absolute; top: 0px; right: 10px; cursor: pointer; } .remove-all{display: block;height:30px;line-height:30px;text-align:center; color: #00A4EA;cursor: pointer} .submit-box{clear: both;margin-top:50px;} .submit{cursor: pointer} </style> </head> <body> <div class="box"> <form> <div class="username-box"> <label for="username" class="account-label">帐号:</label> <div class="account-box"> <input type="text" id="username" class="username" autocomplete="off" /> </div> </div> <div class="submit-box"> <input type="button" value="确认提交" id="submit" class="submit"> </div> </form> </div> <script type="text/javascript" src="js/jquery-1.12.4.min.js"></script> <script type="text/javascript" src="js/js.cookie.js"></script> <script type="text/javascript" src="js/index.js"></script> </body> </html>
js
$(function(){ function historyAccount (type) { // 测试localStorage是否能存取到值,能存取就用localStorage,通过isLocal判断 localStorage.setItem("test",'test'); var isLocal = localStorage.getItem("test"); // 提交表单按钮,通过验证规则后存入localStorage,Cookie $("body").on("click", "#submit", function () { // 输入值不为空,才写入历史记录 if($("#username").val()) { var addArr = []; addArr.push($("#username").val()); var newArr = []; // 充值账号验证 checkAccount(addArr, type, newArr); if(newArr.length > 0){ var newAccount = $("#username").val(); var local_data = localStorage.getItem("Account"); var cookies_data = Cookies.get("Account"); var account = ''; if (isLocal) { account = localStorage.getItem("Account"); } else { account = Cookies.get("Account"); } if (account) { var accounts = account.split(','); var j = 0; for (i = 0, len = accounts.length; i < len; i++) { if (accounts[i] !== $("#username").val()) { newAccount += "," + accounts[i]; j++; } if(j >= 10) break; // 存储最大条数 } }else{ localStorage.setItem("Account", JSON.stringify(newArr[0])); Cookies.set('Account', JSON.stringify(newArr[0])); } localStorage.setItem("Account", newAccount); Cookies.set("Account", newAccount); } location.reload(); // 此处刷新是为了模拟提交表单的刷新,更新存储数据,实际项目中可以删除此行代码 } }); // 显示历史充值账号 function showAccount(){ var newArr = []; var account = ''; if (isLocal) { account = localStorage.getItem("Account"); } else{ account = Cookies.get("Account"); } var arr = []; if(account) { var temple = ""; if(account.indexOf(',') < 0) arr.push(account); arr = account.split(','); if(arr.length >= 5){ arr = arr.slice(0, 5); // 历史记录展示最大条数 } checkAccount(arr, type, newArr); if(newArr.length > 0) { temple += "<ul class='history-account'>"; $.each(newArr, function (i, g) { temple += "<li value="" + i + "">" + g + "<div class='remove'>X</div></li>"; }); temple += "<div class='remove-all'>清除历史</div>"; temple += "</ul>"; } } $(".username").after(temple); } showAccount(); // 移入焦点显示 $("body").on("click", "#username", function () { $(".history-account").show(); }); // 失去焦点隐藏 $("body").on("blur", "#username", function () { $(".history-account").hide(); }); // 选中填入表单 blur事件优先于click事件,所以在选中记录的时候,blur先执行了;所以用mousedown(手机端可以用touchstart)事件优先于blur $("body").on("mousedown", ".history-account>li:not(.remove-all)", function () { $('#username').val($(this).text()); $(".history-account").hide(); }); // 清除所有历史记录 $("body").on("mousedown", ".remove-all", function () { alert(1); localStorage.removeItem("Account"); Cookies.remove("Account"); $('.history-account').remove(); }); //清除单条历史记录 $("body").on("mousedown", ".remove", function (event) { event.stopPropagation(); var value = $(this).parent('li').text(); var local_data = localStorage.getItem("Account"); var cookies_data = Cookies.get("Account"); var account = ''; if (!local_data && cookies_data) { account = Cookies.get("Account"); } else { account = localStorage.getItem("Account"); } var arr = []; console.log('account', account); if (account.indexOf(',') >= 0) { arr = account.split(',') if (arr.length >= 5) { arr = arr.slice(0, 5); } Array.prototype.remove = function (val) { for (var i = 0; i < this.length; i++) { if (this[i] == val) this.splice(i, 1); } }; arr.remove(value); $(this).parent('li').remove(); localStorage.setItem("Account", arr); Cookies.set("Account", arr); } else { localStorage.removeItem("Account"); Cookies.remove("Account"); $('.history-account').remove(); } }); // 根据商品类型筛选账号 function checkAccount(array, account_type, newArr) { var types = account_type.split("|"); var Reg = ''; // 验证规则,可以添加修改 $.each(types, function(i, v) { switch(v){ case "": case "0": Reg = ''; break; case "1": Reg = /^(0|86|17951)?(13[0-9]|15[012356789]|17[0-9]|18[0-9]|14[57])[0-9]{8}$/; break; // 手机 case "2": Reg = /^[1-9][0-9]{4,12}$/; break; // QQ case "3": Reg = /^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(.[a-zA-Z0-9_-]+)+$/; break; // 邮箱 case "4": Reg = /^(0[0-9]{2,3})-?([0-9]{7,8})$/; break; // 固定电话 } // console.log('Reg', Reg); if(array){ for (var i = 0, len = array.length; i < len; i++) { if (newArr.indexOf(array[i]) == -1 && array[i].match(Reg)){ newArr.push(array[i]); } } } }); console.log('newArr', newArr); return newArr; } } // 传入的参数type字符串类型 var type = '0'; // "0"||"" -全部 "1"-手机 "2"-QQ "3"-邮箱 "4"-固定电话 "1|2"-手机+QQ "1|2|3"-手机+QQ+邮箱 ... historyAccount(type); })