表单校验插件

https://github.com/1456745460/my_validate_publish/

 

<!DOCTYPE html>
<html>

	<head>
		<meta charset="utf-8" />
		<title>表单校验插件</title>
		<script type="text/javascript" src="js/jquery.min.js"></script>
		<script type="text/javascript" src="layer/layer.js"></script>
		<script type="text/javascript" src="js/my_validate_1.1.js"></script>
	</head>
	<body>
		<form action="192.168.0.28:8080/test/HelloWorld.action" method="post" id="formId">
			<table border="1" cellspacing="1" cellpadding="1">
				<tr>
					<th colspan="2">表单校验插件</th>
					<th width="200px"></th>
				</tr>
				<tr>
					<td>*用户名:</td>
					<td><input type="text" id="uname" name="uname" style="width: 233px;"></td>
					<td><span id="tuname"></span></td>
				</tr>
				<tr>
					<td>*密码:</td>
					<td><input type="password" id="pswd" name="pswd" style="width: 233px;"></td>
					<td><span id="tpswd"></span></td>
				</tr>
				<tr>
					<td>*确认密码:</td>
					<td><input type="password" id="pswd2" style="width: 233px;"></td>
					<td><span id="tpswd2"></span></td>
				</tr>
				<tr>
					<td>*年龄:</td>
					<td><input type="text" id="age" name="age" style="width: 233px;"></td>
					<td><span id="tage"></span></td>
				</tr>
				<tr>
					<td>*性别:</td>
					<td>男:<input type="radio" id="sex1" name="sex" checked="checked">&nbsp;&nbsp;女:<input type="radio" id="sex2" name="sex"></td>
					<td><span id="tsex"></span></td>
				</tr>
				<tr>
					<td>*简介:</td>
					<td><textarea id="mainBody" rows="10" cols="30" name="mainBody"></textarea></td>
					<td><span id="tmainBody"></span></td>
				</tr>
			</table>
			<button type="button" id="subId">提交</button>
		</form>
	</body>
	<script>
		function checkJson() {
			var checkJson = [{
					id: "uname",
					tid: "tuname",
					rules: [{
						reg: zz.notNull(),
						tips: "用户名不能为空"
					}, {
						longest: "10",
						shortest: "2",
						tips: "用户名长度限制在2-10个字符"
					}]
				},
				{
					id: "pswd",
					tid: "tpswd",
					rules: [{
						reg: zz.notNull(),
						tips: "密码不能为空"
					}]
				}, {
					id: "pswd2",
					tid: "tpswd2",
					rules: [{
						custom: checkPswd,
						tips: "两次密码输入不一致"
					}]
				}, {
					id: "age",
					tid: "tage",
					rules: [{
						reg: zz.notNull(),
						tips: "年龄不能为空"
					}, {
						reg: zz.ffzs(),
						tips: "请输入正确的年龄"
					}]
				}, {
					id: "mainBody",
					tid: "tmainBody",
					rules: [{
						reg: zz.notNull(),
						tips: "简介不能为空"
					}, {
						longest: "10",
						shortest: "0",
						tips: "简介长度限制在10个字符以内"
					}]
				}
			];
			return checkJson;
		}

		function checkPswd() {
			if($("#pswd").val() == $("#pswd2").val()) {
				return true;
			} else {
				return false;
			}
		}

		// 提交特殊参数
		function specialData() {
			var fileData={nihao:"你好"};
			var circulaterData={woyehao:"我也好"};
			return {
				'fileData': JSON.stringify(fileData),
				'circulaterData': JSON.stringify(circulaterData)
			};
		}

		$(function() {
			$().my_validate({
				subId: "subId", // 提交按钮 id
				formId: "formId", // form 表单 id
				ifAjax: true, // 是否使用ajax 提交 true/false/ 跨域ajax jsonp
				realTime: true, // 实时 onblur 校验 true/false
				ifLayer: true, // 是否 使用 layer true/false
				ifImg: true, // 提示语 是否使用感叹号图标 true/false
				ImgUrl: "img/error.png", // 感叹号图标url地址
				AutoScroll:[true,270],  // 第一个不通过校验的文本框,自动滚动到该位置  true/false  ,第二个参数,距离顶部像素
				submitSpecialData: true // ajax提交时,另外加的特殊参数,true/false   写一个 function specialData(){return {'a':'asd','b':'sdf'}}
			});
		});
	</script>
</html>
;
(function($) { // 开启沙箱模式
	$(function() {
		
		var CanSubmit = true; // 是否可以提交开关
		
		$.fn.my_validate = function(obj) {
			var subId = obj["subId"];
			var formId = obj["formId"];
			var ifAjax = obj["ifAjax"]!=undefined?obj["ifAjax"]:false;
			var realTime = obj["realTime"]!=undefined?obj["realTime"]:true;
			var ifLayer = obj["ifLayer"]!=undefined?obj["ifLayer"]:false;
			var ifImg = obj["ifImg"]!=undefined?obj["ifImg"]:false;
			var ImgUrl = obj["ImgUrl"]!=undefined?obj["ImgUrl"]:false;
			var submitSpecialData = obj["submitSpecialData"]!=undefined?obj["submitSpecialData"]:false;
			var AutoScroll=obj["AutoScroll"]!=undefined?obj["AutoScroll"]:[false,0];

			if(document.getElementById(subId) == null) {
				alert("subId配置错误!!!");
				return false;
			}
			if(document.getElementById(formId) == null) {
				alert("formId配置错误!!!");
				return false;
			}

			var myJSON = checkJson();

			if(realTime) { // 实时的校验
				var nowTime=new Date().getTime();
				$("#" + formId).addClass('myValidateForm_'+nowTime);
				for(var i = 0; i < myJSON.length; i++) {                    
					$("#" + myJSON[i].id).addClass("vali_"+nowTime);                
				}
				$(".myValidateForm_"+nowTime+" .vali_"+nowTime).on('blur', function() {                                        
					var t = $(this);  
					layer.closeAll();                                                                            
					for(var i = 0; i < myJSON.length; i++) {                                                
						if(t.attr("id") == myJSON[i].id) {                                                        
							var getId = t.attr("id");                                                        
							var val = $("#" + getId).val();                                                        
							eachVali(val, i);                                                
						}                                        
					}                                
				})
			}

			// 检验函数
			function eachVali(val, i) {
				var ScrollCount=0;
				for(var j = 0; j < myJSON[i].rules.length; j++) {

					// 校验不通过提示函数
					function errorTips(str) {
						if(ifLayer) {
							layer.tips(str, "#" + myJSON[i].id, {
								tipsMore: true
							});
						} else {
							if(ifImg){
								$("#" + myJSON[i].tid).html("<img src='"+ImgUrl+"'>"+str);
							}else{
								$("#" + myJSON[i].tid).html(str);
							}
						}
						if(AutoScroll&&ScrollCount==0){
							$("html, body").animate({scrollTop: $("#" + myJSON[i].id).offset().top-obj["AutoScroll"][1] },0);
							ScrollCount++;
						}
						CanSubmit = false;
					}

					// 校验通过,如果没用layer 提示,置空校验错误提示
					function removeHtml() {
						$("#" + myJSON[i].tid).html("");
					}

					// 第一种,正则校验
					if(typeof(myJSON[i].rules[j].reg) != 'undefined') {
						// 在判断是否为空
						if(myJSON[i].rules[j].reg.toString() == "/^.+$/") {
							if(myJSON[i].rules[j].reg.test(val)) {
								removeHtml();
							} else {
								errorTips(myJSON[i].rules[j].tips);
								break;
							}
						} else {
							if(myJSON[i].rules[j].reg.test(val) && val != "") {
								removeHtml();
							} else {
								errorTips(myJSON[i].rules[j].tips);
								break;
							}
						}

					}
					// 第二种,长度校验
					else if(typeof(myJSON[i].rules[j].longest) != 'undefined') {
						if(val.length > parseInt(myJSON[i].rules[j].longest) || val.length < parseInt(myJSON[i].rules[j].shortest)) {                                                        
							errorTips(myJSON[i].rules[j].tips);                                                       
							break;                                                
						} else {                                                        
							removeHtml();                                                
						}
					}
					// 第三种,自定义校验
					else if(typeof(myJSON[i].rules[j].custom) != 'undefined') {
						if(!myJSON[i].rules[j].custom()) {                                                        
							errorTips(myJSON[i].rules[j].tips);                                                       
							break;                                                
						} else {                                                        
							removeHtml();                                                
						}
					}
					// 以上情况都不存在,书写有误
					else {
						CanSubmit = false;
						alert("校验json配置错误!!!");
						break;
					}
				}
			}

			// 点击提交按钮
			$("#" + subId).on('click', function() {
				CanSubmit = true; 
				layer.closeAll();
				for(var i = 0; i < myJSON.length; i++) {                                                
					var getId = myJSON[i].id;                                                        
					var val = $("#" + getId).val();                                                        
					eachVali(val, i);                                                
				}

				if(CanSubmit) {
					// ajax 提交
					if(ifAjax) {
						var mydata = '';
						if(submitSpecialData) {
							mydata = $.param(specialData()) + '&' + $("#" + formId).serialize();
						} else {
							mydata = $("#" + formId).serialize();
						}
						$.ajax({
							url: $("#" + formId).attr("action"),
							type: $("#" + formId).attr("method"),
							data: mydata,
							dataType: "json",
							success: function(data) {
								getAjax(data);
							},
							error: function(XMLHttpRequest, textStatus, errorThrown) {                                       
								console.log("ajax 提交表单报错了! 错误代码:" + XMLHttpRequest.status);                                       
							}
						});
					}
					// 表单 提交
					else if(ifAjax == false) {
						$("#" + formId).submit();
					}
					// 跨域ajax 提交
					else if(ifAjax == 'jsonp') {
						$.ajax({
							url: $("#"+formId).attr("action"),
							type: "get",
							data: $("#"+formId).serialize(),
							dataType: "jsonp",
							jsonp: "jsoncallback",
							success: function(data) {
								getAjax(data);
							},
							error: function(XMLHttpRequest, textStatus, errorThrown) {                                       
								console.log("ajax 跨域 提交表单报错了! 错误代码:" + XMLHttpRequest.status);                                    
							}
						});
					}
				} 
			});

		}
	});

    // 快捷调用常用正则
	zz = {  // 定义一个 名为 zz 的方法,在这里添加常用正则, 例如 zz.notNull()  调用
		       
		notNull: function() {
			return /^.+$/;
		},
		  // 不能为空
		       chinese: function() {
			return /^[\u4e00-\u9fa5]+$/;
		}, // 中文
		       email: function() {
			return /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((\.[a-zA-Z0-9_-]{2,3}){1,2})$/;
		}, // 邮箱
		       post: function() {
			return /^[1-9][0-9]{0,}$/;
		}, //邮政编码
		       num: function() {
			return /^[0-9]*$/;
		}, // 数字
		       ffzs: function() {
			return /^\d+$/;
		}, // 非负整数
		       aBc123: function() {
			return /^[A-Za-z0-9]+$/;
		}, //数字和英文
		       mobile: function() {
			return /^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$/;
		}, //手机号
		       tel: function() {
			return /^1[0-9]{10}$/;
		}, // 手机号
		       fax: function() {
			return /^((\d{7,8})|(\d{4}|\d{3})-(\d{7,8})|(\d{4}|\d{3})-(\d{7,8})-(\d{4}|\d{3}|\d{2}|\d{1})|(\d{7,8})-(\d{4}|\d{3}|\d{2}|\d{1}))$/;
		} //传真
		         
	}
})(jQuery);
// @且听风吟

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
jQuery formValidator表单验证插件,它是基于jQuery类库,实现了js脚本于页面html代码的分离。你可以划分多个校验组,每个组的校验都是互不影响。对一个表单对象,你只需要写一行代码就可以轻松实现无数种脚本控制。jQuery formValidator表单插件致力于改善重复编程、考虑浏览器兼容性等情况;你只关心业务逻辑,而无需关心实现过程,只需简单的配置,无需写代码就能实现表单的检验。 jQuery formValidator表单校验插件 4.1.0 升级内容: 新增以下功能: 1、新增换肤功能,包括提示层的样式、输入控件(目前只支持text、password、file、textarea)的样式。initConfig增加theme属性,表示皮肤名,theme的值可取目录theme下的文件夹名。详见电子版帮助文件里的【制作皮肤】 2、formvalidator函数增加属性leftTrim和rightTrim。是否去掉左边或右边的空格,默认值false 3、ajaxValidator的success事件,可以返回字符串,表示错误信息,将显示在提示层上。 4、为initConfig增加属性ajaxForm,用于配置整个表单ajax提交的参数,详见demo7和api帮助 $.formValidator.initConfig({theme:"Default",submitOnce:true,formID:"form1",ajaxForm:{ dataType : "html", buttons:$("#button"), url: "http://www.51gh.net/chkuser.aspx?act=ok" }}); 5、所有函数的onError和onSuccess支持字符串,也支持函数(参数为当前的值)返回字符串。 6、发布网页版代码生成器,从当前版本开始支持。 解决以下BUG: 1、修正ajaxValidator函数有一处条件书写错误的BUG。 2、修正formvalidator函数autoModify属性对password控件不起作用的BUG。 调用步骤: a、在你要校验表单页面中引入代码生成器的脚本。 b、调用函数。如果已经写了校验代码,请在校验代码注册完成后调用。 $.formValidatorTools.openTools(); 压缩包相关变更 1、所有的帮助、范例制作成了chm电子帮助文件 2、插件相关的文件放一个目录里 插件支持5种大的校验方式,分别是:inputValidator(针对input、textarea、select控件的字符长度、值范围、选择个数的控制)、compareva lidator(提供2个对象的比较,目前可以比较字符串和数值型)、ajaxValidator(通过ajax到服务器上做数据校验)、regexValidator(提供可扩展的正则表达式库) 、functionValidator (可使用外部函数来做校验,可以当做过程处理)。插件支持四种提示模式:固定提示层(FixTip)、自动构建提示层(AutoTip)、单个提示层跟随(SingleTip)、弹出提示内容(AlertTip)。插件支持换肤:默认情况下提供4套皮肤,其中包括58网、网易邮箱注册两套皮肤。 本插件于其他校验控件最大的区别有6点: 1、校验功能可以扩展。    对中文、英文、数字、整数、实数、Email地址格式、基于HTTP协议的网址格式、电话号码格式、手机号码格式、货币格式、邮政编码、身份证号码、QQ号码、日期等等这些控制,别的表单校验控件是代码里写死的,而formValidator是通过外部js文件来扩展的,你可以通过写正则表达式和函数来无限的扩展这些功能。 2、实现了校验代码于html代码的完全分离。    你的所有信息都无需配置在校验表单元素上,你只要在js上配置你的信息。使美工(界面)和JavaScript工程师的工作不交织在一起 3、你只需写一行代码就能完成一个表单元素的所有校验。你只需要写一行代码就能完成一下所有的控制 •支持所有类型客户端控件的校验 •支持jQuery所有的选择器语法,只要控件有唯一ID和type属性 •支持函数和正则表达式的扩展。提供扩展库formValidatorReg.js,你可以自由的添加、修改里面的内容。 •支持2种校验模式。第一种:文字提示(showword模式);第二种:弹出窗口提示(showalert模式) •支持多个校验组。如果一个页面有多个提交按钮,分别做不同得提交,提交前要做不同的校验,所以你得用到校验组的功能。 •支持4种状态的信息提示功能,可以
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值