自己编写了一个表单验证插件,支持ajax验证,使用起来很简单。
每个需要验证的表单元素下面有一个span标签,这个标签的class有一个valid表示需要验证,如果有nullable则表示可为空;rule表示验证规则,msg表示错误提示信息;to表示要验证的元素的name值,如果元素是单个的,to可以不写。该插件会遍历每个有valid的span标签,找出它前面需要验证的元素,根据rule验证,如果验证不通过,则显示边框为红色,鼠标放在元素上时显示错误信息。
验证时机:1、点击提交按钮时显式调用验证方法;2、当元素触发blur时验证。
插件代码:
CSS:
.failvalid { border: solid 2px red !important; }
JS:
/** * suxiang * 2014年12月22日 * 验证插件 */ SimpoValidate = { //验证规则 rules: { int: /^[1-9]\\d*$/, number: /^[+-]?\\d*\\.?\\d+$/ }, //初始化 init: function () { $(\".valid\").each(function () { //遍历span if ($(this)[0].tagName.toLowerCase() == \"span\") { var validSpan = $(this); var to = validSpan.attr(\"to\"); var target; if (to) { target = $(\"input[name=\'\" + to + \"\'],select[name=\'\" + to + \"\'],textarea[name=\'\" + to + \"\']\"); } else { var target = validSpan.prev(); } if (target) { target.blur(function () { SimpoValidate.validOne(target, validSpan); }); } } }); }, //验证全部,验证成功返回true valid: function () { SimpoValidate.ajaxCheckResult = true; var bl = true; $(\".valid\").each(function () { //遍历span if ($(this)[0].tagName.toLowerCase() == \"span\") { var validSpan = $(this); var to = validSpan.attr(\"to\"); var target; if (to) { target = $(\"input[name=\'\" + to + \"\'],select[name=\'\" + to + \"\'],textarea[name=\'\" + to + \"\']\"); } else { target = validSpan.prev(); } if (target) { if (!SimpoValidate.validOne(target, validSpan)) { bl = false; } } } }); return bl && SimpoValidate.ajaxCheckResult; }, //单个验证,验证成功返回true validOne: function (target, validSpan) { SimpoValidate.removehilight(target, msg); var rule = SimpoValidate.getRule(validSpan); var msg = validSpan.attr(\"msg\"); var nullable = validSpan.attr(\"class\").indexOf(\"nullable\") == -1 ? false : true; //是否可为空 var to = validSpan.attr(\"to\"); var ajaxAction = validSpan.attr(\"ajaxAction\"); if (target) { //checkbox或radio if (target[0].tagName.toLowerCase() == \"input\" && target.attr(\"type\") && (target.attr(\"type\").toLowerCase() == \"checkbox\" || target.attr(\"type\").toLowerCase() == \"radio\")) { var checkedInput = $(\"input[name=\'\" + to + \"\']:checked\"); if (!nullable) { if (checkedInput.length == 0) { SimpoValidate.hilight(target, msg); return false; } } } //input或select if (target[0].tagName.toLowerCase() == \"input\" || target[0].tagName.toLowerCase() == \"select\") { var val = target.val(); if (!nullable) { if ($.trim(val) == \"\") { SimpoValidate.hilight(target, msg); return false; } } else { if ($.trim(val) == \"\") { SimpoValidate.removehilight(target, msg); return true; } } if (rule) { var reg = new RegExp(rule); if (!reg.test(val)) { SimpoValidate.hilight(target, msg); return false; } } if (ajaxAction) { SimpoValidate.ajaxCheck(target, val, ajaxAction); } } else if (target[0].tagName.toLowerCase() == \"textarea\") { var val = target.text(); if (!nullable) { if ($.trim(val) == \"\") { SimpoValidate.hilight(target, msg); return false; } } else { if ($.trim(val) == \"\") { SimpoValidate.removehilight(target, msg); return true; } } if (rule) { var reg = new RegExp(rule); if (!reg.test(val)) { SimpoValidate.hilight(target, msg); return false; } } if (ajaxAction) { SimpoValidate.ajaxCheck(target, val, ajaxAction); } } } return true; }, ajaxCheckResult: true, ajaxCheck: function (target, value, ajaxAction) { var targetName = target.attr(\"name\"); var data = new Object(); data[targetName] = value; $.ajax({ url: ajaxAction, type: \"POST\", data: data, async: false, success: function (data) { if (data.data == true) { SimpoValidate.removehilight(target); } else { SimpoValidate.ajaxCheckResult = false; SimpoValidate.hilight(target, data.data); } } }); }, //获取验证规则 getRule: function (validSpan) { var rule = validSpan.attr(\"rule\"); switch ($.trim(rule)) { case \"int\": return this.rules.int; case \"number\": return this.rules.number; default: return rule; break; } }, //红边框及错误提示 hilight: function (target, msg) { target.addClass(\"failvalid\"); target.bind(\"mouseover\", function (e) { SimpoValidate.tips(target, msg, e); }); target.bind(\"mouseout\", function () { SimpoValidate.removetips(); }); }, //取消红边框及错误提示 removehilight: function (target) { target.unbind(\"mouseover\"); target.unbind(\"mouseout\"); target.removeClass(\"failvalid\"); SimpoValidate.removetips(); }, //显示提示 tips: function (target, text, e) { var divtipsstyle = \"position: absolute; z-index:99999; left: 0; top: 0; background-color: #dceaf2; padding: 3px; border: solid 1px #6dbde4; visibility: hidden; line-height:20px; font-size:12px;\"; $(\"body\").append(\"<div class=\'div-tips\' style=\'\" + divtipsstyle + \"\'>\" + text + \"</div>\"); var divtips = $(\".div-tips\"); divtips.css(\"visibility\", \"visible\"); var top = e.clientY + $(window).scrollTop() - divtips.height() - 18; var left = e.clientX; divtips.css(\"top\", top); divtips.css(\"left\", left); $(target).mousemove(function (e) { var top = e.clientY + $(window).scrollTop() - divtips.height() - 18; var left = e.clientX; divtips.css(\"top\", top); divtips.css(\"left\", left); }); }, //移除提示 removetips: function () { $(\".div-tips\").remove(); } }; $(function () { SimpoValidate.init(); });
如何使用:
Edit页面:
@using Model.Suya; @{ ViewBag.Title = \"Add\"; Layout = \"~/Views/Shared/_Layout.cshtml\"; } @{ List<sys_post> postList = (List<sys_post>)ViewData[\"postList\"]; sys_post post = (sys_post)ViewData[\"post\"]; } <script type=\"text/javascript\"> $(function () { //部门树 $(\'#dept\').combotree({ url: \'GetDeptTree\', required: false, checkbox: true, onLoadSuccess: function () { $(\'#dept\').combotree(\'setValue\', \"@(post.depCode)\"); } }); //操作结果 $(\"#ifrm\").load(function (data) { var data = eval(\"(\" + $(\"#ifrm\").contents().find(\"body\").html() + \")\"); alert(data.msg); if (data.ok) back(); }); $(\"select[name=\'postLevel\']\").find(\"option[value=\'@(post.postLevel)\']\").attr(\"selected\", \"selected\"); }); //保存 function save() { if (valid()) { $(\"#frm\").submit(); } } //验证 function valid() { var dept = $(\"input[name=\'dept\']\"); if (!dept.val()) { SimpoValidate.hilight(dept.parent(), \"请选择所属部门\"); } else { SimpoValidate.removehilight(dept.parent()); } return SimpoValidate.valid(); } //返回 function back() { parent.$(\'#ttTab\').tabs(\'select\', \"岗位管理\"); var tab = parent.$(\'#ttTab\').tabs(\'getSelected\'); tab.find(\"iframe\").contents().find(\"#btnSearch\").click(); parent.$(\"#ttTab\").tabs(\'close\', \'修改岗位信息\'); } </script> <div class=\"tiao\"> <input type=\"button\" class=\"submit_btn\" value=\"保存\" onclick=\"save()\" /> <input type=\"button\" class=\"submit_btn\" value=\"返回\" onclick=\"back()\" /> </div> <iframe id=\"ifrm\" name=\"ifrm\" style=\"display: none;\"></iframe> <form id=\"frm\" method=\"post\" enctype=\"multipart/form-data\" action=\"/HR/PostManage/SaveEdit?id=@(post.id)\" target=\"ifrm\"> <div class=\"adminMainContent\"> <div class=\"box\"> <div class=\"box-title\"> 基础信息 </div> <div class=\"box-content\"> <table cellpadding=\"0\" cellspacing=\"0\" class=\"detail\" width=\"100%\"> <tr> <td class=\"title\"> <span class=\"mst\">*</span>岗位名称: </td> <td style=\"width: 35%;\"> <input type=\"text\" class=\"xinxi_txt\" name=\"postName\" value=\"@post.postName\" /> <span class=\"valid\" msg=\"必填,且长度不能超过50\" rule=\"^(.|\\n){0,50}$\"></span> </td> <td class=\"title\"> <span class=\"mst\">*</span>岗位编号: </td> <td style=\"width: 35%;\"> <input type=\"text\" class=\"xinxi_txt\" name=\"postCode\" value=\"@post.postCode\" /> <span class=\"valid\" msg=\"必填,且长度不能超过20\" rule=\"^(.|\\n){0,20}$\" ajaxaction=\"/HR/PostManage/AjaxCheckPostCode?id=@post.id\"> </span> </td> </tr> <tr> <td class=\"title\"> <span class=\"mst\">*</span> 所属部门: </td> <td style=\"width: 35%;\"> <input type=\"text\" name=\"depCode\" id=\"dept\" class=\"easyui-combotree\" style=\"height: 30px;\" /> </td> <td class=\"title\"> <span class=\"mst\">*</span>汇报对象: </td> <td style=\"width: 35%;\"> <select class=\"xueli\" name=\"reportPostCode\" id=\"agreementType\"> <option value=\"\" selected=\"selected\">==请选择==</option> @foreach (sys_post item in postList) { if (item.postCode == post.reportPostCode) { <option value=\"@item.postCode\" selected=\"selected\">@item.postName</option> } else { <option value=\"@item.postCode\">@item.postName</option> } } </select> <span class=\"valid\" msg=\"请选择合同分类\"> </td> </tr> <tr> <td class=\"title\"> <span class=\"mst\">*</span>岗位级别: </td> <td style=\"width: 35%;\"> <select class=\"xueli\" name=\"postLevel\"> <option value=\"\" selected=\"selected\">==请选择==</option> <option value=\"1\">1</option> <option value=\"2\">2</option> <option value=\"3\">3</option> <option value=\"4\">4</option> <option value=\"5\">5</option> <option value=\"6\">6</option> </select> <span class=\"valid\" msg=\"请选择岗位级别\"> </td> <td class=\"title\"> </td> <td style=\"width: 35%;\"> </td> </tr> <tr> <td class=\"title\"> <span class=\"mst\">*</span>备注: </td> <td colspan=\"3\" style=\"width: 35%;\"> <textarea name=\"remarks\" style=\"width: 500px;\">@post.remarks</textarea> <span class=\"valid\" msg=\"长度不得超过500\" rule=\"^(.|\\n){0,500}$\"></span> </td> </tr> </table> </div> </div> </div> </form>
效果图:
以上所述就是本文的全部内容了,希望大家能够喜欢。
本文地址:https://www.stayed.cn/item/25002
转载请注明出处。
本站部分内容来源于网络,如侵犯到您的权益,请 联系我