`
jianglanlan
  • 浏览: 13240 次
  • 性别: Icon_minigender_1
  • 来自: 杭州市
社区版块
存档分类
最新评论

jquery validate 自动绑定校验规则

阅读更多

      在WEB项目开发中,前端的数据校验是必须的,在接触过以及实际应用jquery validate,prototype以及spring modules等一系列方式后,感觉用起来都有点麻烦,所以有了想封装jquery validate,让使用者更加方便。

      此次基于jquery validate的封装,也参考了prototype的属性捆绑式校验。代码如下所示:

//文件validate.config.js,需要依赖jquery.validate.js, jquery.metadata.js
var validate;
function Validate(validator) {
	this.validator = validator;
}
Validate.prototype = {
	// 触发表单校验的事件,该方法会有返回值,如果有错误信息则返回false且弹出错误信息,否则返回为true,开发人员可以根据返回的错误信息来进行判断
	validate : function() {
		var result = this.validator.form();
		return result;
	},
	// 重置表单对象
	resetForm : function() {
		this.validator.currentForm.reset();
	},
	// 提交表单对象
	submitForm : function() {
		this.validator.currentForm.submit();
	}
}
$.valid = $.noop;
	
(function($) {
	/**
	 * 给开发者提供可配置的validator的默认配置修改
	 */
	$.extend($.valid, {
		showErrors : null, // 该方法主要用于给开发人员去指定自己的错误信息处理事件,该方法会回调错误信息数组
		useKeyUpValidate : false, // 该属性标志是否按键盘上按键的时候触发校验事件,默认不触发。
		useClickValidate : false, // 该属性标志是否单击表单对象的时候触发校验事件,默认不触发。
		useFocusOutValidate : false, // 该属性标志表单对象失去焦点的时候触发校验事件,默认不触发。
		useFocusInValidate : false, // 该属性标志表单对象得到焦点的时候触发校验事件,默认不触发。
		useValidate : true, // 该属性用于主页面使用,标记是否初始化验证校验器
		elementText : function(element) {
			if (!(element instanceof $)) {
				element = $(element);
			}
			if (element[0]) {
				var key = element[0].name || element.attr('name') || "";
				var label = $('label[for="' + key + '"],[for="' + key + '"]');
					if (!label.length) {
					var pe = element[0].parentElement;
					var fe = $(pe).prev(pe.nodeName);
					if (!fe.text()) {
						fe = $(pe).prev();
					}
					label = fe.text() || element[0].name;
				} else {
					label = $(label[0]).text();
				}
				if (label.indexOf('*') > -1) {
					return label.replace(/[\*]/g, '');
				}
				return label;
			}
			return '';
		},
		/** 用于页面重载时初始化校验器 */
		init : function() {
			this.useKeyUpValidate = false;
			this.useClickValidate = false;
			this.useFocusOutValidate = false;
			this.useFocusInValidate = false;
			this.showErrors = null;
		},
		// 检查表单下是否需要校验
		checkForm : function(form) {
			return true;
		},
		/** 构建验证校验器,支持重构 */
		bindValidate : function(pid) {
			var _this = this;
			/** 判断默认验证方法是否被修改过 */
			if (this.showErrors) {
				$.validator.setDefaults({
					showErrors : function(errorMap, errorList) {
						$.valid.showErrors(errorList);
					}
				});
			} else {
				$.validator.setDefaults({
					/**
					 * 修改validator默认的showErrors方法,错误提示信息以dialog来进行提示
					 */
					showErrors : function(errorMap, errorList) {
						if (errorList.length) {
							var msg = '';
							if (errorList.length == 1) {
								if (errorList[0].message.indexOf('{param}') > -1) {
									msg += errorList[0].message.replace('{param}', $.valid.elementText(errorList[0].element));
								} else {
									msg += errorList[0].message;
								}
							} else {
								for (i in errorList) {
									if (errorList[i].message.indexOf('{param}') > -1) {
										msg += (errorList[i].message.replace('{param}', $.valid.elementText(errorList[i].element)) + '<br/>');									} else {
										msg += (errorList[i].message + '<br/>');
									}
								}
							}
							if (msg) {
								// 调用弹出框对象显示错误信息(错误信息处理可自行扩展)
								dialog.showDialog({value : msg, type : 'warn', focus : $(errorList[0].element)});
							}
						}
					}
				});
			}
			/** 判断默认验证方法是否被修改过 */
			if (!this.useFocusInValidate) {
				$.validator.setDefaults({
					onfocusin : false
				});
			}
			if (!this.useKeyUpValidate) {
				$.validator.setDefaults({
					onkeyup : false
				});
			}
			if (!this.useClickValidate) {
				$.validator.setDefaults({
					onclick : false
				});
			}
			if (!this.useFocusOutValidate) {
				$.validator.setDefaults({
					onfocusout : false
				});
			}
			/** 获取容器中的form表单信息 */
			var forms;
			if (pid && $(pid).length) {
				forms = $('form', pid);
			} else {
				forms = $('form');
			}
			/** 遍历所有的表单信息 */
			if (forms.length) {
				if (forms.length == 1) {
					// 获取表单的验证对象
					validate = this.buildValidator(forms[0]);
				} else {
					forms.each(function(i, form) {
						var validator = _this.buildValidator(form);
						if (validator) {
							// 查看表单是否有id属性或者name属性,如果都没有则标注为当前的第几个form对象
							var key = form.id || form.name || i;
							validate[key] = validator;
						}
					});
					if (validate.length == 1) {
						validate = validate[0];
					}
				}
			}
		},
		/** 构建校验器 */
		buildValidator : function(form) {
			// 获取form表单是否有文本域等表单元素增加了表单检验的规则
			if (!this.checkForm(form)) {
				return null;
			}
			var requireds = $('[required]', form);
			if (requireds.length) {
			        requireds.removeAttr('required').addClass('required');
			}
			// 该form表单存在需要校验的表单信息,默认在表单提交的时候触发,如果用户对表单绑定了对应的提交事件则表单提交的时候不会触发验证事件,需要手动去触发
			var onsubmit = true;
			// 表单是否绑定了submit事件:即form.onsubmit = function 或
			// onsumit='return formSubmit();'
			if (form.onsubmit) {
				onsubmit = false;
			} else {
				// 查看表单是否使用jquery的submit事件来进行绑定				
                                var events = $(form).data('events');
				if (events && events['submit']) {
					onsubmit = false;
				}
			}
			// 返回表单验证对象
			return new Validate($(form).validate({
				onsubmit : onsubmit
			}));
		}
	});
})(jQuery);

jQuery.extend(jQuery.validator.messages, {
	required: "{param} 为必填字段,不能为空!",
	remote: "{param} 不符合要求,请修正该字段!",
	email: "请输入正确格式的电子邮件!",
	url: "{param} 不是合法的网址,请重新输入!",
	date: "{param} 不是合法的日期,请重新输入!",
	dateISO: "{param} 不是合法的日期 (ISO),请重新输入!",
	number: "{param} 只能输入合法的数字,请重新输入!",
	digits: "{param} 只能输入整数,请重新输入!",
	creditcard: "{param} 不是合法的信用卡号,请重新输入!",
	equalTo: "{param} 与 {0} 的值不同,请重新输入!",
	accept: "{param} 后缀名不合法,请重新输入!",
	mask: "{param} 格式不合法,请重新输入!",
	lessthan: "{param} 不能大于 {0} 的值,请重新输入!",
	lessthanminus: "{param} 不能大于 {0} - {1},请重新输入!",
	morethan: "{param} 不能小于 {0} 的值,请重新输入!",
	maxlength: $.validator.format("{param} 仅能输入 {0} 个字,请重新输入!"),
	length: $.validator.format("{param} 有且只能输入 {0} 个字,请重新输入!"),
	minlength: $.validator.format("{param} 至少输入 {0} 个字,请重新输入!"),
	rangelength: $.validator.format("{param} 仅能输入长度介于  {0} 和  {1} 之间的字符串,请重新输入!"),
	range: $.validator.format("{param} 仅介于  {0} 和  {1} 之间的值,请重新输入!"),
	max: $.validator.format("{param} 的最大值为  {0},请重新输入!"),
	min: $.validator.format("{param} 的最小值为  {0},请重新输入!")
});

$(function(){
	if ($.valid.useValidate) {
	     $.valid.bindValidate();
	}
});

   在页面上的元素属性绑定如下(属性即为jQuery.validator.messages中所有的key值):

   

<tr>
    <th><span class="ui-fontSty-red">*</span><label for="menuCode">菜单编号</label></th>
    <td><input name="menuCode" required="required" maxlength="20" rule="codetype" type="text" class="ui-formInput2"/></td>
    <th><span class="ui-fontSty-red">*</span><label for="menuName">菜单名称</label></th>
    <td><input name="menuName" required="required" maxlength="20" type="text" class="ui-formInput2"/></td>
</tr>
//我们需要将可编辑框的文本标识与可编辑框关联起来,即<label for="menuCode">菜单编号</label>所关联的是menuCode文本输入框。

    在表单提交时,如果表单自身没有绑定submit事件,即会自动触发校验,否则我们需要手动调用validate.validate(); 

    

$('form').submit(function(){
	if (validate.validate()) {
		alert('校验成功');
	}
	return false;
});

      如果校验不通过,将会弹出错误信息。

      这样,我们就无需在页面上写大量的javascript代码来做表单校验了。

      源代码以及examples:

  • validate.rar (40.3 KB)
  • 描述: validate自动校验源码
  • 下载次数: 30
分享到:
评论

相关推荐

    jquery.validate表单验证密码完整例子(带密码强度显示)

    首先,`jQuery Validate`的核心功能是验证用户在表单中输入的数据,确保其符合预设的验证规则。例如,我们可以设定密码必须包含字母、数字、特殊字符等要求,以提高安全性。在提供的例子中,它会检查用户输入的密码...

    jquery validate (弹框)

    5. **验证事件**:`jQuery Validate`提供多种验证相关的事件,如`invalid.form`(表单验证失败时触发)、`focusout`(失去焦点时验证)等,可以绑定这些事件以执行额外操作。 6. **异步验证**:对于需要服务器端...

    jquery validate和validform验证插件的对比.pdf

    在**自定义验证**上,jQuery Validate 提供了`.addMethod()`方法,允许开发者定义新的验证规则。例如,可以创建一个验证电话号码格式的方法。而Validform同样具有强大的自定义能力,通过`callback`参数,可以执行...

    jQuery Validate表单验证深入学习

    jQuery Validate插件是前端开发中用于表单验证的常用JavaScript库,它能够方便地集成到jQuery项目中,并提供了一套丰富的验证规则和方法。通过该插件,开发者可以快速实现对表单输入数据的验证,确保数据的准确性和...

    jquery validate和validform验证插件的对比.docx

    - 与jQuery Validate类似,Validform同样支持直接在元素上绑定规则。 - 初始化JS中定义规则:使用`addRule`方法,可以更灵活地指定验证规则,包括多个元素的验证关联。 ### 三、自定义规则 1. **jQuery Validate...

    jquery-validate前台验证框架,带详细使用方法

    jQuery Validate允许你定义各种验证规则,如必填、长度限制、邮箱格式等。规则可以添加到每个输入元素上,如下: ```html ``` 或者在JavaScript中动态设置: ```javascript rules: { username: { required...

    jQuery.validate.js+API中文

    1. 自动绑定:jQuery Validate插件能自动绑定到form元素,监听表单提交事件。 2. 验证规则:内置多种验证规则,如required(必填)、email(邮箱格式)、number(数字)等。 3. 错误消息:可以自定义错误消息,支持...

    jquery validate

    验证插件默认会自动绑定到页面中的`&lt;form&gt;`元素,可以通过`$("#formId").validate()`来启动验证。 ```javascript $(document).ready(function () { $("#myForm").validate(); }); ``` ### 三、验证规则 jQuery ...

    jQuery Validate插件自定义验证规则的方法

    自定义验证规则的实现方式是通过调用jQuery Validate插件提供的jQuery.validator.addMethod()方法。这个方法允许开发者定义一个具有特定逻辑的函数,并将其与一个名称绑定,从而创建一个可以在表单验证规则中引用的...

    jquery.validate例子

    3. `jquery.validate.js`:这是`jQuery Validate`的核心文件,包含了所有验证规则、错误消息和验证逻辑。通过引用这个文件,开发者可以轻松地在他们的表单中启用验证。 在`jQuery Validate`的使用中,主要涉及以下...

    功能强大的jquery.validate表单验证插件

    首先,jquery.validate表单验证插件能够有效地提高开发效率,因为它内置了多种常用的验证规则,比如必填项、数字、电子邮件地址、网址等。这些内置规则让开发者无需从头编写验证逻辑,从而节省了大量时间。此外,...

    js jquery-1.11.1.min.js jquery.validate.min.js

    使用jQuery Validate,开发者可以轻松定义验证规则,如必填项、邮箱格式、数字范围等,并自定义错误消息。 知识点详解: - **选择器**:jQuery 提供了一系列CSS选择器,使得选取DOM元素变得非常容易,如 `$("...

    jQuery的表单校验插件validate

    jQuery的表单校验插件`validate`是前端开发中常用的一个工具,它极大地简化了对HTML表单数据的验证过程。这个插件基于流行的JavaScript库jQuery构建,为开发者提供了丰富的选项和方法来定制表单验证规则,确保用户...

    jquery和jquery-validate

    jQuery Validate是jQuery的一个插件,主要用于表单验证。它提供了丰富的验证规则和自定义错误消息功能,可以帮助开发者轻松实现对用户输入数据的有效性检查,从而提高用户体验并确保后台数据的准确性。 ### jQuery...

    springmvc+mybatis+maven+bootstrap前端+jquery validate表单验证,web开发框架

    2. jQuery的validate插件检查表单数据是否符合预设规则。 3. 如果验证通过,表单数据通过Ajax发送到Spring MVC控制器。 4. 控制器接收到请求后,使用MyBatis的SqlSession执行相应的SQL操作。 5. 数据库操作完成后,...

    很强大jquery表单验证插件jquery.validate.js api.pdf

    `jQuery Validate`支持多种事件绑定,如`keyup`、`click`、`focus`、`blur`等,可以在特定事件触发时执行验证,提高用户体验。 4. **自定义验证方法**: 如果内置的验证规则不能满足需求,`jQuery Validate`提供...

    jquery.validate学习实例

    5. **处理验证结果**:当用户提交表单时,如果验证失败,`jQuery Validate`会自动阻止表单的提交,并在对应的输入框下方显示错误消息。如果你想在验证成功后执行某些操作,可以监听`valid`事件: ```javascript ...

    jquery_validate验证框架

    1. **易用性**:jQuery Validate插件通过简单的API调用就能快速启用表单验证,使得开发人员能够快速地为表单添加验证规则。 2. **丰富的验证规则**:内建了一系列验证方法,如检查必填项(required)、电子邮件格式...

    jquery.validate表单验证框架详解.pdf

    除了这些基本选项,jQuery Validate还提供了许多其他功能,如自定义消息、远程验证以及错误消息定位等。通过这些功能,你可以构建出适应各种需求的复杂验证机制,确保用户提交的数据准确无误。在实际项目中,合理...

Global site tag (gtag.js) - Google Analytics