After doing development for so long, I have been very annoyed by form verification, which seems simple but not simple, so I wrote a form verification framework, so I no longer have to worry about this annoying verification.
The AngularJS instructions are used here to process the code and it is concise and clear
The following is the instruction JS code
app.directive('ccForm',['$parse',function ($parse) { return { restrict:'A', link:function (scope,element,attrs) { var first=true; var errors=0; var checkInterval; function showError(input,errorIndex) { if(first){ errors++; $parse(element.attr('cc-form')).assign(scope,false); refreshScope(scope); return; } input.addClass('hasError'); input.closest('.form-group').addClass('hasError'); input.next('.help-block').find('.cc-show').removeClass('cc-show'); input.next('.help-block').find('[cc-error-'+errorIndex+']').addClass('cc-show'); input.closest('.form-group').next('.help-block').find('.cc-show').removeClass('cc-show'); input.closest('.form-group').next('.help-block').find('[cc-error-'+errorIndex+']').addClass('cc-show'); } function hidError(input,errorIndex) { errors--; if(errors==0){ $parse(element.attr('cc-form')).assign(scope,true); refreshScope(scope); } input.removeClass('hasError'); input.closest('.form-group').removeClass('hasError'); input.next('.help-block').find('[cc-error-'+errorIndex+']').removeClass('cc-show'); input.closest('.form-group').next('.help-block').find('[cc-error-'+errorIndex+']').removeClass('cc-show'); } function checkInput(input) { var that=$(input); // $('[cc-email]')[0].attributes[0].name var attrs=input.attributes; var value=that.val(); for(var i=0,attr;attr=attrs[i];i++){ if(attr.name=='cc-email'){ if(/^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/.test(value)){ hidError(that,attr.value) }else{ showError(that,attr.value); break; } }else if(attr.name=='cc-phone'){ if(/\d{11}/.test(value)){ hidError(that,attr.value); }else { showError(that,attr.value); break; } }else if(attr.name=='cc-max'){ if(value.length>attr.value){ showError(that,that.attr(attr.name+'-error')); break; }else { hidError(that,that.attr(attr.name+'-error')); } }else if(attr.name=='cc-min'){ if(value.length<attr.value){ showError(that,that.attr(attr.name+'-error')); break; }else { hidError(that,that.attr(attr.name+'-error')); } }else if(attr.name=='cc-regex'){ var patten=new RegExp(attr.value); if(patten.test(value)){ hidError(that,that.attr(attr.name+'-error')); }else { showError(that,that.attr(attr.name+'-error')); break; } }else if(attr.name=='cc-require'){ if(!value||value.trim()==''){ showError(that,attr.value); break; }else { hidError(that,attr.value); } } } } function checkForm(form) { form.find('input,textarea').each(function () { checkInput(this); }); } element.find('input,textarea').focus(function (e) { var that=this; first=false; checkInterval=setInterval(function () { checkInput(that); },500); }); element.find('input,textarea').blur(function (e) { first=false; checkInput(this); clearInterval(checkInterval); }); element.find('[cc-submit]').click(function (e) { first=false; clearInterval(checkInterval); checkForm(element); }); //预检测时不显示错误提示 checkForm(element); } } }]);
The corresponding one requires a little CSS code, the following is written in LESS
.help-block { * { &:not(.cc-show) { display: none; } } }
corresponding The CSS is
.help-block *:not(.cc-show) { display: none; }
Usage 1
<div> <h1 id="test">test</h1> <form cc-form="form1"> <div class="from-group"> <input type="password" ng-model="user.password" cc-max="16" cc-max-error="1" cc-min="6" cc-min-error="2"> <div class="help-block"> <p cc-error-1>密码长度不能超过16位</p> <p cc-error-2>密码最短为6</p> </div> </div> <div class="form-group"> <input ng-model="user.phone" cc-regex="\d{11}" cc-regex-error="1"> <div class="help-block"> <p cc-error-1>请输入正确的手机号</p> </div> </div> <div class="form-group"> <input ng-model="user.fax" cc-require="1"> <div class="help-block"> <p cc-error-1>请输入传真</p> </div> </div> <div class="form-group"> <input ng-model="user.email" cc-email="1"> <div class="help-block"> <p cc-error-1>请输入正确的邮箱</p> </div> </div> <button type="button" cc-submit>提交</button> </form> </div>
Usage 2
<form class="form shadow-box" cc-form="form1"> <h3 id="登录">登录</h3> <div class="form-group"> <div class="cellphone"> <input placeholder="手机号" ng-model="user.loginName" name="loginName" cc-regex="\d{11}" cc-regex-error="1" cc-require="2"/> </div> </div> <div class="help-block"> <p cc-error-1>请输入正确的手机号</p> <p cc-error-2>请输入手机号</p> </div> <div class="form-group"> <div class="password"> <input placeholder="密码" type="password" ng-model="user.password" name="password" cc-require="1"/> </div> </div> <div class="help-block"> <p cc-error-1>请输入密码</p> </div> <div class="form-group"> <div class="vcode"> <input placeholder="验证码" ng-model="user.vcode" name="vcode" cc-require="1"> <img src="" alt="Introduction to form validation instructions based on angularJS" > </div> </div> <div class="help-block"> <p cc-error-1>请输入验证码</p> </div> <div class="checkbox"> <label> <input type="checkbox" ng-model="user.rememberPass" ng-true-value="true" ng-false-value="false">自动登录 </label> </div> <p class="to-register">没有账号?<a href="#/main/register">立即注册</a></p> <button type="button" ng-click="login(1)" cc-submit>登录</button> </form>
So simple and clear

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Zend Studio 13.0.1
Powerful PHP integrated development environment

SecLists
SecLists is the ultimate security tester's companion. It is a collection of various types of lists that are frequently used during security assessments, all in one place. SecLists helps make security testing more efficient and productive by conveniently providing all the lists a security tester might need. List types include usernames, passwords, URLs, fuzzing payloads, sensitive data patterns, web shells, and more. The tester can simply pull this repository onto a new test machine and he will have access to every type of list he needs.

Dreamweaver CS6
Visual web development tools

Atom editor mac version download
The most popular open source editor

SublimeText3 Mac version
God-level code editing software (SublimeText3)
