zoukankan      html  css  js  c++  java
  • 模仿 BootstrapValidator 自制 模块化 表单验证

    index.html :

    <!DOCTYPE html>
    <html lang="en">
    <head>
    	<meta charset="UTF-8">
    	<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
    	<title>BootstrapValidator</title>
    	<link rel="stylesheet" type="text/css" href="assets/bootstrap.min.css">
    	<style>
    		html,body{
    			margin: 0;
    			padding: 0;
    			 100%;
    			height: 100%;
    		}
    		#form-panel{
    			 40%;
    			padding: 30px;
    			border: 1px solid #bbb;
    			border-radius: 7px;
    			margin: auto;
    			margin-top: 10%;
    		}
    		#form-panel .form-control ~ p {
    			color: #c7254e;
    		}
    	</style>
    </head>
    <body>
    	<div id="form-panel">
    		<form id="html5Form" method="post" class="form-horizontal">
    			<!--
    			data-dv-xxxx
    			规则1:required=boolean required-message 必填项
    			规则2:regex=String regex-message 正则匹配失败
    			规则3:email=boolean email-message 邮箱验证失败
    			规则4:uri=boolean uri-message 
    				age
    				greaterthan
    				lessthan
    			-->
    			<div class="form-group">
    				<label class="col-lg-3 control-label">Username</label>
    				<div class="col-lg-7">
    					<input type="text" class="form-control" name="username"
    						data-dv-required="true"
    						data-dv-required-message="The username is required and cannot be empty"
    						data-dv-regex="^[a-zA-Z0-9]+$"
    						data-dv-regex-message="The username can only consist of alphabetical,number"
    						autocomplete="off" />
    				</div>
    			</div>
    
    			<div class="form-group">
    				<label class="col-lg-3 control-label">Email</label>
    				<div class="col-lg-7">
    					<input class="form-control" name="email"
    						data-dv-required="true"
    						data-dv-required-message="The email is required and cannot be empty"
    						data-dv-email="true"
    						data-dv-email-message="The input is not a valid email address"
    						autocomplete="off" />
    				</div>
    			</div>
    
    			<div class="form-group">
    				<label class="col-lg-3 control-label">Website</label>
    				<div class="col-lg-7">
    					<input class="form-control" name="website"
    						data-dv-required="true"
    						data-dv-required-message="The website is required and cannot be empty"
    						data-dv-uri="true"
    						data-dv-uri-message="The input is not a valid website address"
    						autocomplete="off" />
    				</div>
    			</div>
    
    			<div class="form-group">
    				<label class="col-lg-3 control-label">Age</label>
    				<div class="col-lg-7">
    					<input type="text" class="form-control" name="age"
    						data-dv-required="true"
    						data-dv-required-message="The age is required and cannot be empty"
    						data-dv-greaterthan="10"
    						data-dv-greaterthan-message="The input must be greater than or equal to 10"
    						data-dv-lessthan="100"
    						data-dv-lessthan-message="The input must be less than 100"
    						data-dv-integer="true"
    						data-dv-integer-message="The input must be integer"
    						autocomplete="off" />
    				</div>
    			</div>
    
    			<div class="form-group">
    				<div class="col-lg-12 text-center">
    					<input class="btn btn-primary" type="button" value="Regist" />
    					<input class="btn btn-primary" type="reset" value="Reset" />
    				</div>
    			</div>	
    		</form>
    	</div>
    
    	<script src="assets/jquery.min.js"></script></body>
    	<script src="bootstrap-dn-validator-1.11.0/js/bootstrap-dn-validator.js"></script>
    	<script>
    		// 1.json数据格式
    		// $(document).ready(function() {
    		// 	$('#html5Form').dnValidator({
    		// 		"username":"/^$/",
    		// 		"age":"/^$/"
    		// 	});
    		// });
    
    		$(document).ready(function() {
    			$('#html5Form').dnValidator({
    				trigger:"keyup"
    			});
    		});
    	</script>
    </html>
    

    bootstrap-dn-validator.js :

    // bootstrap自定义插件有两种方式来实现参数配置
    // 1.json数据格式
    // 2.html attribute(属性)配置
    
    // 1.创建闭包
    (function(root,factory,plug){
    	// 4.创建闭包对象
    	return factory(root.jQuery,plug);
    })(window,function($,plug){ // 3.传入 $ plug
    	// 9.默认参数 保证健壮性
    	var __DEFS__ = {
    		trigger:"change"
    	};
    
    	// 11.规则引擎
    	var __RULES__ = {
    		required:function(){
    			// console.log('required' + this.val());
    			return this.val()!=="";
    		},
    		regex:function(){
    			return new RegExp(this.data("dv-regex")).test(this.val());
    		},
    		email:function(){
    			return /^[a-z0-9]+([._\-]*[a-z0-9])*@([a-z0-9]+[-a-z0-9]*[a-z0-9]+.){1,63}[a-z0-9]+$/.test(this.val());
    		},
    		uri:function(){
    			return /^[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+.?$/.test(this.val());
    		},
    		// 扩展
    		integer:function(){
    			return /^[0-9]*[1-9][0-9]*$/.test(this.val());
    		},
    		greaterthan:function(){
    			return Number(this.val())>Number(this.data("dv-greaterthan"));
    		},
    		lessthan:function(){
    			return Number(this.val())<Number(this.data("dv-lessthan"));
    		}
    	}
    
    	// 5.进行插件扩展 可以对jQuery进行重命名(通过创建作用,命令别名)
    	// 创建dnValidator插件
    	$.fn[plug] = function(options){ // 8.options 用户传参
    		// 10.继承
    		$.extend(this,__DEFS__,options);
    		// 6.找到表单中所有的input标签
    		var $fileds = this.find("input").not("[type=button],[type=reset],[type=submit]"); // 需要验证的表单域
    		// console.log($fileds.size()); // input个数
    		// 7.绑定事件
    		$fileds.on(this.trigger,function(){
    			var $field = $(this); // 被验证的目标对象
    			var result = true; // 14.验证结果,默认通过
    			$field.next().remove(); // 17.验证之前先把之前的错误信息移除掉
    			// 12.迭代rule
    			$.each(__RULES__,function(rule,valider){ // rule规则  valider验证器
    				// 13.判断目标对象被哪些规则验证
    				if($field.data("dv-"+rule)){
    					// 我需要验证rule这个规则
    					// console.log($field.attr("name") + "需要验证" + rule + "规则");
    					// 15.判断,只要有一个验证失败,就停止验证
    					result = valider.call($field); // true false call改变作用域
    					if(!result){ // 验证失败
    						// 16.显示提示信息
    						$field.after("<p>" + $field.data("dv-" + rule + "-message") + "</p>");
    					}
    					return result;
    				}
    			});
    		});
    	}
    },"dnValidator")
    // 2.匿名函数调用
    // 参数1:window对象
    // 参数2:function(){} 回调函数
    // 参数3:插件名称
    

    .

  • 相关阅读:
    目标检测应用化之web页面(YOLO、SSD等)
    传统候选区域提取方法
    非极大值抑制(Non-Maximum Suppression,NMS)
    Darknet windows移植(YOLO v2)
    线性判别分析 LDA
    SVM 支持向量机
    特征-相似度衡量
    布隆过滤器 Bloom Filter
    聚类算法
    图论--最大流
  • 原文地址:https://www.cnblogs.com/crazycode2/p/7078618.html
Copyright © 2011-2022 走看看