上周写了一个页面,里面有一个很大的form,一个一个写验证太麻烦了,于是写了一个jQuery的表单验证插件。我希望达到这样的效果:
- 调用应该是链式的,如:
$('#form').required('input1Name').maxlength('input1Name',7).required('input2Name').email('input2Name').validate(userSpecifiedConfig);
以上语句达到的效果是name属性为input1Name的表单项必填,最长长度为7;name属性为input2Name的表单项必填,并符合email的格式。
2. 插件应该是可配置的,通过上面的userSpecifiedConfig对象,修改或者部分修改默认配置
jQuery的官网上有一篇灰常强大的插件tutorial,解决了我所有的问题,
地址,这篇文章实际上规定了写插件的一种范式,或者叫“最佳实践”,如下:
(function($){
//overridable configuration
var config = {
validateOnBlur : true,
showAllErrorOnSubmit : true,
validateFailCallBack : function(rule){
alert(rule.explain);
}
};
//public method
var methods = {
validate : function(options) {
return this.each(function() {
// If options exist, lets merge them
// with our default settings
if ( options ) {
$.extend( config, options );
}
//do other stuff
});
},
required : function(inputName,explain){
//Maintaining Chainability
return this.each(function(){
//do your thing
});
},
};
$.fn.validate = function( method ) {
// Method calling logic
if ( methods[method] ) {
return methods[ method ].apply( this, Array.prototype.slice.call( arguments, 1 ));
} else if ( typeof method === 'object' || ! method ) {
return methods.validate.apply( this, arguments );
} else {
$.error( 'Method ' + method + ' does not exist on jQuery.validate' );
}
};
})(jQuery);
- 首先,所谓的闭包,整个插件代码用(function( $ ){ })( jQuery );包起来,这样,你就不用担心插件内部定义的函数名与外部冲突了,当然,你扩展的$.fn对象名字依然不能和$.fn中已有的对象冲突
- 在插件的开头,定义你的config对象,写上你的配置项和默认值。那么,如何修改这些配置呢,请往下面看。
- 现在该定义插件的公共方法了,由于几乎所有的插件都是在扩展$.fn,所以项目规模大的话,很容易会有命名冲突,官网的tutorial甚至要求一个插件只占用$.fn中的一个名字。现在我想定义很多公共方法,怎么办呢,解决方法是类似
$('#1').bind('focus',function(){});
这种风格的API,将方法名字作为第一个参数传入。同时我在插件里定义一个methods对象,将各种方法的实现塞在里面
- 下面具体看每个方法的实现,以代码中的methods.validate函数为例,首先,不加思索的,第一行写上return this.each(function(){}),这是为了返回this对象,从而实现链式的调用,有点诡异,看来each返回的是调用者本身?API上并没有提到这点。然后,如果你需要修改默认配置,得在函数参数里加上比如说option,option应该类似这样的
option={
validateOnBlur :false
}
然后用一个很神奇的$.extend()方法来搞定参数的更新,好吧,我承认,要不是看了白纸黑字,我绝对想不到还有 这么个函数。。这样我就告诉插件,在文本框blur的时候不用验证了,最后submit时验证就可以了。
- 写完公共方法后,下一个是重头戏,我们要在$.fn里加一个函数,这样插件才能被$对象调用,最牛叉的是,这个函数别人已经给写好了。。我们改个名字就可以了。这个函数就干一件事,根据第一个参数找到methods数组里对应的方法,然后把剩下的参数传给这个方法,一执行就完了。当然,你可能希望有一个函数是默认调用的,比如说,这里我希望调用validate()函数时不用再传'validate'参数了,我只需要修改else if里的语句就可以了。
介绍完范式以后,下面还是说说表单验证吧,为了防止命名冲突,我的插件的调用方法已经变了,先给大家看一段实际使用插件的代码:
$('#infoform').validate('required','name','请填写公司名称')
.validate('required','password','请填写密码')
.validate('required','contactName','请填写联系人姓名')
.validate('chineseName','contactName')
.validate('required','province','请选择您所在的省')
.validate('required','city','请选择您所在的城市')
.validate('required','address','请填写您所在的地址')
.validate('required','email','请填写您的电子邮箱地址')
.validate('email','email','请填写有效的电子邮箱地址')
.validate('custome','confirmPassword',function(){
var p = $(':password[name=password]').attr('value');
var confirm = $(':password[name=confirmPassword]').attr('value');
if(p == confirm){
return true;
}
return false;
},'确认密码与密码不符')
.validate({
validateFailCallBack : function(rule){
$(':input[name='+rule.name+']','#infoform').each(function(){
var parent = $(this).parent();
parent.addClass('fm-error');
$('.fm-explain',parent).html(rule.explain);
//reset when on focus again
$(this).bind('focus',function(){
//clear error style
});
});
}
});
这样就搞定了一个表单的验证,很方便有木有!!
- 可以看到,我定义了很多的公共方法,除了required,还有email、姓名之类的,用来对不同格式的文本做验证,如果插件里实在没有,还可以调用custome方法,向这个方法注册一个回调的验证函数就可以了,这里,我用custome方法实现了对确认密码栏的验证
- 使用时基本上是要重写config中的validateFailCallBack方法了,我提供的默认方法只是把错误信息alert出来。
就这么多了,很简单吧,jQuery用起来是舒坦啊,怪不得这么火了。
另外,我腆着脸把代码附在下面了,请给点意见哦,呵呵
分享到:
相关推荐
本文主要针对“jquery表单验证插件”进行详细介绍,并通过示例代码展示其使用方法。 #### 二、jQuery Form插件介绍 jQuery Form插件由Malsup开发,是一款非常实用的jQuery扩展,能够极大地简化表单的Ajax提交过程。...
本篇文章将深入探讨“jQuery插件:form表单验证”这一主题,包括其工作原理、如何调用以及实际应用。 表单验证是Web应用程序中的一个关键部分,确保用户输入的数据符合预设的规则,防止错误数据的提交。jQuery插件...
在Web开发中,表单验证是必不可少的一环,确保用户输入的数据符合预设规则。jQuery Validate插件就是为此目的而设计的,它为jQuery提供了一种简单且强大的方式来验证HTML表单。 jQuery Validate插件的核心功能包括...
综上所述,"Jquery表单验证特效示例"涵盖了使用jQuery进行表单验证的基本原理、常见规则、自定义规则和视觉反馈。通过学习和实践这些示例,开发者能够创建出既有实用性又有吸引力的表单验证机制,从而提高网站或应用...
本人制作的jquery表单验证插件JfomValidate 功能:可以完成绝大数页面的脚本验证效果,压缩包里有示例和调用说明。 压缩包包含文件: index.html -- 说明及示例 JfomValidate.min.js -- 插件 jquery-1.3.2.min.js -...
jQuery formValidator是一款强大的JavaScript表单验证插件,它基于jQuery库,用于在用户提交表单前验证输入数据的正确性和格式。这个插件提供了一系列灵活的验证规则和自定义选项,使得开发者能够轻松地实现复杂的...
假设已经正确引入这两个文件,接下来可以通过以下步骤实现表单验证: 1. **添加验证规则**:在HTML表单元素中,通过添加特定的类或数据属性来指定验证规则。例如,`class="required"`表示该字段必须填写;`data-...
JQuery插件是社区开发者为了方便其他人复用和扩展功能而创建的代码模块,例如,轮播图插件、表单验证插件等。了解如何使用和定制这些插件,可以提升项目开发的效率和质量。 最后,“jQ第三季最后.rar”可能是更高...
**jQuery表单验证插件EasyValidator 2.0:打造高效且友好的用户输入体验** 在Web开发中,表单验证是不可或缺的一部分,它确保了用户提交的数据符合预期的格式和标准,从而防止无效数据的输入。jQuery作为一款广泛...
本篇文章将深入讲解jQuery的表单验证插件,并通过`formValidator3.1`这个示例来展示其工作原理和用法。 ### jQuery 表单验证插件概述 jQuery 表单验证插件通常是一个轻量级的库,用于增强原生HTML表单的功能,提供...
**jQuery FormValidation插件**是前端开发中一个广泛使用的工具,专门用于实现高效且用户友好的表单验证。这个插件基于流行的JavaScript库jQuery构建,它简化了在Web应用程序中实施复杂的验证规则的过程。在标题提到...
jQuery Validate插件作为一款强大的JavaScript验证工具,广泛应用于各种表单验证场景,包括手机注册表单验证。本文将深入探讨jQuery Validate插件的使用方法,以及如何将其应用于手机注册表单的验证。 一、jQuery ...
这个jQuery插件利用这两个事件来实现实时的表单验证,使用户在输入时就能立即看到他们的输入是否有效。 首先,我们需要引入jQuery库。`jquery-1.9.js`是jQuery的1.9版本,这是一个广泛使用的JavaScript库,它简化了...
1. **丰富的预设规则**:该插件内置了多种验证规则,如必填项、电子邮件格式、电话号码、日期等,满足了大多数常见的表单验证需求。 2. **自定义验证**:除了预设规则,Validation Engine还允许开发者创建自定义...
《Validate通用表单验证Jquery插件:前端验证技术详解》 在Web开发中,表单验证是一项必不可少的任务,它确保用户输入的数据符合预设的规则,从而避免无效数据的提交,提高系统的稳定性和用户体验。"Validate通用...
jQuery,作为一款广泛使用的JavaScript库,提供了强大的表单验证插件——jQuery Validate,使得表单验证变得简单易行。本文将深入探讨jQuery表单验证的相关知识点,帮助开发者更好地理解和应用这一功能。 1. **...
在当今的Web开发中,表单验证是一个不可或缺的环节,它有助于确保用户提交的数据是准确和完整的。本文将详细讲解如何使用jQuery来制作一个表单验证插件,并通过具体的代码示例来展示如何实现这一功能。 首先,了解...