一个表单小应用
来源:互联网 发布:中国电视台 知乎 编辑:程序博客网 时间:2024/05/21 20:21
实现一个表单:通过电话号码+密码登录,并通过iframe无刷新提交表单数据。
源代码:
<!DOCTYPE html><html><head> <meta charset="UTF-8"> <title>test</title> <style> body, button, input, legend{ margin: 0; padding: 0; font: 16px "微软雅黑"; } .m-form{ margin: 150px auto; width: 325px; border: 1px solid #ddd; } .m-form legend{ width: 100%; line-height: 30px; text-indent: 1em; color: #fff; background-color: #2d2d2d; } .m-form fieldset{ border: none; padding: 20px; } .m-form div{ margin: 20px; } .m-form button{ width: 100%; height: 30px; color: #fff; border: 1px solid #ddd; cursor: pointer; background-color: #2d7dca; } .m-form .msg{ margin:5px; text-align:center; display:none; } .m-form .tip{ padding-left:6em; font-size:12px; color:#C0C0C0; } .m-form .j-err{ display:block; color:#FF0000; } .m-form .j-suc{ display:block; color:#158226; } .m-form .u-txt{ width: 160px; padding: 3px; border:1px solid #aaa; } .m-form .j-error{ border-color: #f00; background-color: #FFE7E7; } .m-form .j-disabled{ cursor: default; background-color: #ddd; } </style></head><body> <form action="./login" class="m-form" name="loginForm" target="result" autocomplete="off"> <!--表单顶部--> <legend>手机号码登录</legend> <fieldset> <!--错误提示信息--> <div class="msg" id="message"></div> <!--输入手机号码--> <div> <label for="telephone">手机号:</label> <input id="telephone" name="telephone" type="tel" class="u-txt" maxlength="11" required pattern="^0?(13[0-9]|15[012356789]|18[0236789]|14[57])[0-9]{8}$"><br/> <span class="tip">11位数字手机号码</span> </div> <!--密码输入--> <div> <label for="password">密 码:</label> <input id="password" name="password" type="password" class="u-txt"><br/> <span class="tip">至少6位,同时包含数字和字母</span> </div> <!--登录提交按钮--> <div> <button name="loginBtn">登 录</button> </div> </fieldset> </form> <!--通过iframe无刷新提交表单--> <iframe name="result" id="result" style="display:none;"></iframe> <script> (function(){ var form = document.forms.loginForm, nmsg = document.getElementById('message'); // 密码加密 function md5(msg){ return msg; } // 显示信息 function showMessage(clazz,msg){ if (!clazz){ nmsg.innerHTML = ''; nmsg.classList.remove('j-suc'); nmsg.classList.remove('j-err'); }else{ nmsg.innerHTML = msg; nmsg.classList.add(clazz); } } // 禁用提交按钮 function disableSubmit(disabled){ form.loginBtn.disabled = !!disabled; var method = !disabled?'remove':'add'; form.loginBtn.classList[method]('j-disabled'); } // 手机号验证失败 function invalidInput(node,msg){ showMessage('j-err',msg); node.classList.add('j-error'); node.focus(); } // 清除原来的状态 function clearInvalid(node){ showMessage(); node.classList.remove('j-error'); } // 验证手机号 form.telephone.addEventListener('invalid',function(event){ event.preventDefault(); var input = form.telephone; invalidInput(input,'请输入正确的手机号码'); }); // 状态恢复 form.addEventListener('input',function(event){ clearInvalid(event.target); // 还原错误状态 disableSubmit(false); // 还原登录按钮状态 }); // 验证密码 form.addEventListener('submit',function(event){ var input = form.password, pswd = input.value, emsg = ''; if (pswd.length<6){ emsg = '密码长度必须大于6位'; }else if(!/\d/.test(pswd)||!/[a-z]/i.test(pswd)){ emsg = '密码必须包含数字和字母'; } if (!!emsg){ // 密码验证不通过 event.preventDefault(); invalidInput(input,emsg); return; } input.value = md5(pswd); // 加密密码 disableSubmit(true); // 禁用提交按钮 } ); // 利用iframe无刷新提交表单 var frame = document.getElementById('result'); frame.addEventListener('load',function(event){ try{ var result = JSON.parse(frame.contentWindow.document.body.textContent); // 还原登录按钮状态 disableSubmit(false); // 识别登录结果 if (result.code===200){ showMessage('j-suc','登录成功!'); form.reset(); } }catch(ex){ // ignore } } ); })(); </script></body></html>
login:
{ "code": 200, "result":{ "id": 200000, "username":"test" }}
运行结果:
电话号码输入不对时:
密码不对时:
电话号码和密码都正确的,点击登录按钮:
github地址:
https://github.com/Xganying/JavaScript/tree/master/%E8%A1%A8%E5%8D%95%E5%B0%8F%E5%BA%94%E7%94%A8
阅读全文
0 0
- 一个表单小应用
- 一个angular4.0响应式表单应用~~~
- windbg 的一个小应用
- 蓝牙的一个小应用
- 一个小应用---点名系统
- 一个天气预报的小应用
- ListView的一个小应用
- 用js提交表单的一个小教训
- 一个 Rails 表单样式设置的小技巧
- 一个Jlist控件应用的小例子
- RSS应用中的一个小问题
- 做完一个小应用之后的总结
- Java一个小应用项目打包心得
- 一个WPF的应用小程序
- Java集合应用中的一个小问题
- M8基于触摸屏的一个小应用
- 一个PhoneGap写的小应用
- Ibatis缓存应用的一个小问题
- Spring MVC 解读——@RequestMapping
- iOS日常学习
- [九大内置对象]session、application、pageContext
- C++拷贝构造函数详解
- Guava学习笔记:Preconditions优雅的检验参数
- 一个表单小应用
- 入库数据中文乱码问题
- 【JavaSE笔记】Java常用类及其方法(六)_BigDecimal
- visual studio 无法打开WinSock2.h报错
- [LeetCode]111. Minimum Depth of Binary Tree
- Android monkey 使用及日志分析
- 介绍一点怎么样在网页建设中用到的非常实用方法
- Linux的 sort,uniq,cut,wc命令详解
- Revit API 之 如何查找材质属性所对应的中文名称