jQuery 表单验证扩展(一)

好长一段时间没有写js代码了,也好长时间没有写文章了。今天刚申请一个2M 的电信宽带,下午闲来无事写了一个 基于jQuery的表单验证插件。首先申明这个插件问题比较多,不过觉得这个东西很有必要。后期持续跟新中,先把自己写的插件原型拿出来晒晒!

再次申明,插件问题比较多,后期一个个来解决,请不要恶言相向。希望各位多多提好的建议善言。 

 

一. 分析表单验证的基本情况

在我们做web开发的过程中,会遇到各种各样的验证。归纳一下基本可以分为一下几类:

(1). 是否必填项 [这个是非常基本的]

(2). 输入参数中的范围校验

(3). 输入参数与另外一个控件值的比较

(4). 输入的参数正则表达式验证 

 

二. 是否必填项验证

有如下几种情况: (1) 输入框获得焦点提示  (2)输入框失去焦点验证错误提示  (3)输入框失去焦点验证正确提示

首先确定输入框是否是必填项,然后就是提示消息的现实位置。

根据以上几种情况确定如下几个参数:

 required : 是否为必填项,true 和 false ,true 表示为必填项 (*)

 onFocus : 获得焦点的文字提示(如果指定样式则在样式名前加 @ ,因此文字提示首字母不能有@)

onBlur : 失去焦点的文字提示(如果指定样式则在样式名前加 @ ,因此文字提示首字母不能有@)(验证失败提示)

onSucces : 验证成功的文字提示(如果指定样式则在样式名前加 @ ,因此文字提示首字母不能有@)

tipId : 用于显示提示信息的控件id (*)

组合例子 : {required:true,onFocus:"Required",onBlur:"@error",onSucces:"Success",tipId:"tipid"} 

注意: 上面定义的一些规则,有些可能没有实现,在后期过程中逐渐完善。

jQuery检查输入框是否为必填项

/**
 * 检查输入框是否为必填项
 * 输入参数:
 * required    : 是否为必填项,true 和 false ,true 表示为必填项 (*)
 * onFocus    : 获得焦点的文字提示(如果指定样式则在样式名前加 @ ,因此文字提示首字母不能有@)
 * onBlur    : 失去焦点的文字提示(如果指定样式则在样式名前加 @ ,因此文字提示首字母不能有@)(验证失败提示)
 * onSucces    : 验证成功的文字提示(如果指定样式则在样式名前加 @ ,因此文字提示首字母不能有@)
 * tipId    : 用于显示提示信息的控件id (*)
 * 组合例子    : {required:true,onFocus:"Required",onBlur:"@error",onSucces:"Success",tipId:"tipid"}
 */
$.fn.extend({
    checkRequired:function(inputArg){
        if(inputArg.required){
            if($(this).is("input") || $(this).is("textarea")){
                //绑定获得焦点事件
                $(this).bind("focus",function(){
                    if(inputArg.onFocus!=undefined){
                        $("#" + inputArg.tipId).html(inputArg.onFocus);
                    }
                });
                
                //绑定失去焦点事件
                $(this).bind("blur",function(){
                    if($(this).val()!=undefined && $(this).val()!=""){
                        $("#" + inputArg.tipId).html(inputArg.onSucces);
                    }else{
                        $("#" + inputArg.tipId).html(inputArg.onBlur);
                    }
                });
            }
        }
    }
});

 

 

  使用效果和测试代码:

  当获得焦点时候后面提示效果

  当失去焦点没有输入提示效果

 当输入文本信息之后提示成功效果

测试代码如下:

jQuery检查输入框是否为必填项 测试代码

<script language="JavaScript" src="jquery-1.3.2.min.js" type="text/javascript"></script>
<script language="JavaScript" src="jquery-extend-1.0.0.js" type="text/javascript"></script>
<script language="JavaScript" type="text/javascript">
    $(document).ready(function(){
        $("#txtName").checkRequired({
            required:true,
            onFocus:"这个为必填项",
            onBlur:"必须填写啊",
            onSucces:"恭喜,你输入了",
            tipId:"txtNameTip"
        });
    });
</script>

 

 

 三. 输入参数中的范围校验

相比上面的验证来说,这个稍微复杂了一些,因为有输入值的范围。校验做了如下区分:输入的数据类型为 字符串, 数字 ,时间

如果是字符串则比较字符串的长短,数字和时间比较大小。(时间目前没有完善) 

因为比较范围所以定义一个区间范围,所以这里再添加两个属性,下限值和上限值。

输入参数列表:

onFocus : 获得焦点的文字提示(如果指定样式则在样式名前加 @ ,因此文字提示首字母不能有@)

onEmpty : 输入项为空文字提示(如果指定样式则在样式名前加 @ ,因此文字提示首字母不能有@)

onSucces : 验证成功的文字提示(如果指定样式则在样式名前加 @ ,因此文字提示首字母不能有@)

onBlur : 失去焦点的文字提示(如果指定样式则在样式名前加 @ ,因此文字提示首字母不能有@)(验证失败提示)

dataType : 数据类型参数(text,number,date)

min : 输入的最小值

max : 输入的最大值

tipId : 用于显示提示信息的控件id (*)

jQuery检查输入项的范围

/**
 * 检查输入项的范围
 * 输入参数:
 * onFocus    : 获得焦点的文字提示(如果指定样式则在样式名前加 @ ,因此文字提示首字母不能有@)
 * onEmpty    : 输入项为空文字提示(如果指定样式则在样式名前加 @ ,因此文字提示首字母不能有@)
 * onSucces    : 验证成功的文字提示(如果指定样式则在样式名前加 @ ,因此文字提示首字母不能有@)
 * onBlur    : 失去焦点的文字提示(如果指定样式则在样式名前加 @ ,因此文字提示首字母不能有@)(验证失败提示)
 * dataType    : 数据类型参数(text,number,date)
 * min        : 输入的最小值
 * max        : 输入的最大值
 * tipId    : 用于显示提示信息的控件id (*)
 * 
 */
$.fn.extend({
    checkRange:function(inputArg){
        if ($(this).is("input") || $(this).is("textarea")) {
            //获得焦点绑定
            $(this).bind("focus",function(){
                if(inputArg.onFocus!=undefined){
                    $("#" + inputArg.tipId).html(inputArg.onFocus);
                }
            });
            
            //失去焦点绑定
            $(this).bind("blur",function(){
                if($(this).val()==undefined || $(this).val()==""){
                    $("#" + inputArg.tipId).html(inputArg.onEmpty);
                }else{
                    switch(inputArg.dataType){
                        case "text":
                            if($(this).val().length>= parseInt(inputArg.min) && $(this).val().length< parseInt(inputArg.max)){
                                $("#" + inputArg.tipId).html(inputArg.onSucces);
                            }else{
                                $("#" + inputArg.tipId).html(inputArg.onBlur);
                            }
                        break;
                        case "number":
                            if(!isNaN($(this).val())){
                                if(parseInt($(this).val())>parseInt(inputArg.min) && parseInt($(this).val())<parseInt(inputArg.max)){
                                    $("#" + inputArg.tipId).html(inputArg.onSucces);
                                }else{
                                    $("#" + inputArg.tipId).html(inputArg.onBlur);
                                }
                            }
                        break;
                        case "date":
                        break;
                    }
                }
            });
        }
    }
});

 

 

  输入项范围效果和测试代码

  如果年龄约定为数字 

  输入不在约定范围之内

  验证成功 

jQuery检查输入项的范围 测试代码

$("#txtAge").checkRange({
    onFocus:"年龄为数字",
    onEmpty:"不能为空啊",
    onSucces:"验证成功",
    onBlur:"验证失败,请认真输入",
    dataType:"number",
    min:"10",
    max:"100",
    tipId:"txtAgeTip"
});

<p>
<label>年龄:</label><input type="text" id="txtAge" value=""/><span id="txtAgeTip"></span>
</p>

 

 

 

 四. 输入参数与另外一个控件值的比较

和上面的验证比较,不同的地方在于要指定比较控件的id

下面是输入参数:

onFocus : 获得焦点的文字提示(如果指定样式则在样式名前加 @ ,因此文字提示首字母不能有@)

onEmpty : 输入项为空文字提示(如果指定样式则在样式名前加 @ ,因此文字提示首字母不能有@)

onSucces : 验证成功的文字提示(如果指定样式则在样式名前加 @ ,因此文字提示首字母不能有@)

onBlur : 失去焦点的文字提示(如果指定样式则在样式名前加 @ ,因此文字提示首字母不能有@)(验证失败提示)

dataType : 数据类型参数(text,number,date)

comType : 比较的类型(=,>,>=,<,<=,!=) 

tipId : 用于显示提示信息的控件id (*)

targetId : 比较的目标控件Id

jQuery控件值之间的比较

/**
 * 控件值之间的比较
 * 输入参数:
 * onFocus    : 获得焦点的文字提示(如果指定样式则在样式名前加 @ ,因此文字提示首字母不能有@)
 * onEmpty    : 输入项为空文字提示(如果指定样式则在样式名前加 @ ,因此文字提示首字母不能有@)
 * onSucces    : 验证成功的文字提示(如果指定样式则在样式名前加 @ ,因此文字提示首字母不能有@)
 * onBlur    : 失去焦点的文字提示(如果指定样式则在样式名前加 @ ,因此文字提示首字母不能有@)(验证失败提示)
 * dataType    : 数据类型参数(text,number,date) 
 * comType    : 比较的类型(=,>,>=,<,<=,!=)
 * tipId    : 用于显示提示信息的控件id (*)
 * targetId    : 比较的目标控件Id
 */

$.fn.extend({
    checkCompare:function(inputArg){
        if($(this).is("input") || $(this).is("textarea")){
            //获得焦点绑定
            $(this).bind("focus",function(){
                if(inputArg.onFocus!=undefined){
                    $("#" + inputArg.tipId).html(inputArg.onFocus);
                }
            });
            
            //失去焦点绑定
            $(this).bind("blur",function(){
                var targetValue=$("#"+inputArg.targetId).val();
                if(targetValue!=undefined && targetValue!=null){
                    if($(this).val()!=undefined && $(this).val()!=""){
                        if(inputArg.dataType=="text"){
                            switch(inputArg.comType){
                                case "=":
                                    if(targetValue==$(this).val()){
                                        $("#" + inputArg.tipId).html(inputArg.onSucces);
                                    }else{
                                        $("#" + inputArg.tipId).html(inputArg.onBlur);
                                    }
                                break;
                                case "!=":
                                    if(targetValue!=$(this).val()){
                                        $("#" + inputArg.tipId).html(inputArg.onSucces);
                                    }else{
                                        $("#" + inputArg.tipId).html(inputArg.onBlur);
                                    }
                                break;
                            }
                        }else if(inputArg.dataType=="number"){
                            if (isNaN(targetValue) == false && isNaN($(this).val()) == false) {
                                switch (inputArg.comType) {
                                    case "=":
                                        if (targetValue == $(this).val()) {
                                            $("#" + inputArg.tipId).html(inputArg.onSucces);
                                        }
                                        else {
                                            $("#" + inputArg.tipId).html(inputArg.onBlur);
                                        }
                                        break;
                                    case "!=":
                                        if (targetValue != $(this).val()) {
                                            $("#" + inputArg.tipId).html(inputArg.onSucces);
                                        }
                                        else {
                                            $("#" + inputArg.tipId).html(inputArg.onBlur);
                                        }
                                        break;
                                    case ">":
                                        if ($(this).val() > targetValue) {
                                            $("#" + inputArg.tipId).html(inputArg.onSucces);
                                        }
                                        else {
                                            $("#" + inputArg.tipId).html(inputArg.onBlur);
                                        }
                                        break;
                                    case ">=":
                                        if ($(this).val() >= targetValue) {
                                            $("#" + inputArg.tipId).html(inputArg.onSucces);
                                        }
                                        else {
                                            $("#" + inputArg.tipId).html(inputArg.onBlur);
                                        }
                                        break;
                                    case "<":
                                        if ($(this).val() < targetValue) {
                                            $("#" + inputArg.tipId).html(inputArg.onSucces);
                                        }
                                        else {
                                            $("#" + inputArg.tipId).html(inputArg.onBlur);
                                        }
                                        break;
                                    case "<=":
                                        if ($(this).val() <= targetValue) {
                                            $("#" + inputArg.tipId).html(inputArg.onSucces);
                                        }
                                        else {
                                            $("#" + inputArg.tipId).html(inputArg.onBlur);
                                        }
                                        break;
                                }
                            }else{
                                $("#" + inputArg.tipId).html(inputArg.onBlur);
                            }
                        }else if(inputArg.dataType=="date"){
                            
                        }
                    }else{
                        $("#" + inputArg.tipId).html(inputArg.onEmpty);
                    }
                }
            });
        }
    }
});

 

 

控件值之间的比较效果和测试代码

  效果图1

       效果图2

          效果图3

jQuery控件值之间的比较 测试代码

$("#txtPass2").checkCompare({
    onFocus:"和前面的比较",
    onEmpty:"输入的不能为空",
    onSucces:"验证成功",
    onBlur:"验证失败",
    dataType:"number",
    comType:">=",
    tipId:"txtPass2Tip",
    targetId:"txtPass1"
});

<p>
            <label>密码1:</label><textarea id="txtPass1"></textarea><span id="txtPass1Tip"></span>
        </p>
        <p>
            <label>密码2:</label><textarea id="txtPass2"></textarea><span id="txtPass2Tip"></span>
        </p>

 

 

五. 输入的参数正则表达式验证 

这个验证相对比较简单,因为使用正则表达式,无需自己去思考输入的情况。只需要引入一个正则表达式就可以了

下面是输入参数:

onFocus : 获得焦点的文字提示(如果指定样式则在样式名前加 @ ,因此文字提示首字母不能有@)

onEmpty : 输入项为空文字提示(如果指定样式则在样式名前加 @ ,因此文字提示首字母不能有@)

onSucces : 验证成功的文字提示(如果指定样式则在样式名前加 @ ,因此文字提示首字母不能有@)

onBlur : 失去焦点的文字提示(如果指定样式则在样式名前加 @ ,因此文字提示首字母不能有@)(验证失败提示)

regExp : 正则表达式

tipId : 用于显示提示信息的控件id (*)

jQuery正则表达式的验证

/**
 * 正则表达式的验证
 * 输入参数:
 * onFocus    : 获得焦点的文字提示(如果指定样式则在样式名前加 @ ,因此文字提示首字母不能有@)
 * onEmpty    : 输入项为空文字提示(如果指定样式则在样式名前加 @ ,因此文字提示首字母不能有@)
 * onSucces    : 验证成功的文字提示(如果指定样式则在样式名前加 @ ,因此文字提示首字母不能有@)
 * onBlur    : 失去焦点的文字提示(如果指定样式则在样式名前加 @ ,因此文字提示首字母不能有@)(验证失败提示)
 * regExp    : 正则表达式
 * tipId    : 用于显示提示信息的控件id (*)
 */

$.fn.extend({
    checkRegExp:function(inputArg){
        if ($(this).is("input") || $(this).is("textarea")) {
            //获得焦点绑定
            $(this).bind("focus", function(){
                if (inputArg.onFocus != undefined) {
                    $("#" + inputArg.tipId).html(inputArg.onFocus);
                }
            });
            
            //获得失去焦点事件
            $(this).bind("blur",function(){
                if($(this).val()!=undefined && $(this).val()!=""){
                    if ($(this).val().match(inputArg.regExp) == null) { 
                        $("#" + inputArg.tipId).html(inputArg.onSucces);
                    }else{
                        $("#" + inputArg.tipId).html(inputArg.onBlur);
                    }
                }else{
                    $("#" + inputArg.tipId).html(inputArg.onEmpty);
                }
            });
        }
    }
});

 

 

正则表达式效果和测试代码

   输入非数字

    输入数字

jQuery正则表达式的验证 测试代码

$("#txtAge").checkRegExp({
    onFocus:"年龄必须为数字",
    onEmpty:"输入的不能为空",
    onSucces:"验证成功",
    onBlur:"验证失败",
    regExp:/\D/,
    tipId:"txtAgeTip"
});

<label>年龄:</label><input type="text" id="txtAge" value=""/><span id="txtAgeTip"></span>

 

 

这是验证插件的一个基本雏形,后期不断跟新.......... 

时间: 2024-10-12 07:42:19

jQuery 表单验证扩展(一)的相关文章

jQuery 表单验证扩展代码(二)_jquery

一. 存在的问题 在上篇中我已经提到过,验证提示打算用文本和样式两种方式来显示提示消息,这两种提示都只能单独使用,于是新的跟新内容做了一些扩展,使得两者可以共用.前一篇写的是否必填项这个验证只是正对 Text, TextArea 这两个表单元素,在新的扩展中同时也支持了radio,checkbox 两个元素. 二. 验证参数的设计 基于多重选择的考虑,扩展了一些有必要的参数,参数列表如下: required: 是否为必填项,true 和 false ,true 表示为必填项 (*) onFocu

jQuery 表单验证扩展(三)_jquery

在看这篇文章之前, 可以看看前两篇文章,表单验证输入范围验证是在原有的基础上改写的. (一). 输入范围验证存在问题 在第二篇上提到的问题,在原有的验证中也存在相同的问题.当然在这次改写中也解决了一些这些问题.同时也添加了对radio,checkbox,select 元素的验证.当然对于时间的验证仍没有解决,后续过程中会继续补充! (二). 验证参数的设计 onEmptyText: 当输入内容为空的时候显示文本 onEmptyClass: 当输入内容为空的时候显示样式 onSuccessText

jQuery 表单验证扩展(四)

周末写的 jQuery 表单验证扩展(三)  这篇文章点击率过低,不知道是文章太失水准还是什么其他原因,这里写文章只是为了分享一下自己写代码的心得,同时也是巩固自己所学的东西!如果文章中存在问题,请大家多多斧正!本篇文章介绍jQuery 表单验证扩展中的控件值的比较 文章回顾: jQuery 表单验证扩展(三) jQuery 表单验证扩展(二) jQuery 表单验证扩展(一)     (一). 存在的问题 这篇文章和第一篇中提到的控件值之间的比较没有多大的区别,唯一更近的就是在样式的处理.同时

jQuery 表单验证扩展(五)

大概在一个月之前,自己尝试着写一个jQuery的表单验证插件,当初的目的并不是为了让这个插件流行起来,只是为了自己学习的需要.由于工作的问题,这个问题一直处于停留的状态.前些天报名参加了那个什么博客大赛,最近未写一篇博客,当然本文也不是了参加什么博客大赛而写,只是作为自己学习的积累.今天抽空重新整理了一下插件中的正则表达式的验证,在此分享一下.希望大家多多指教   文章回顾: jQuery 表单验证扩展(一)  jQuery 表单验证扩展(二)  jQuery 表单验证扩展(三)  jQuery

jQuery 表单验证扩展(二)

前些天写了一篇文章 jQuery 表单验证扩展(一) ,这是jQuery表单验证扩展的一个雏形,里面有了一些基本的功能!昨晚再次努力了一下,对表单中是否必填项验证这个部分做了一些修改的扩充!   一. 存在的问题 在上篇中我已经提到过,验证提示打算用文本和样式两种方式来显示提示消息,这两种提示都只能单独使用,于是新的跟新内容做了一些扩展,使得两者可以共用.前一篇写的是否必填项这个验证只是正对 Text, TextArea 这两个表单元素,在新的扩展中同时也支持了radio,checkbox 两个

jQuery 表单验证扩展代码(一)_jquery

再次申明,插件问题比较多,后期一个个来解决,请不要恶言相向.希望各位多多提好的建议善言. 一. 分析表单验证的基本情况 在我们做web开发的过程中,会遇到各种各样的验证.归纳一下基本可以分为一下几类: (1). 是否必填项 [这个是非常基本的] (2). 输入参数中的范围校验 (3). 输入参数与另外一个控件值的比较 (4). 输入的参数正则表达式验证 二. 是否必填项验证 有如下几种情况: (1) 输入框获得焦点提示 (2)输入框失去焦点验证错误提示 (3)输入框失去焦点验证正确提示 首先确定

JQuery表单验证插件EasyValidator用法分析_jquery

本文实例讲述了JQuery表单验证插件EasyValidator用法.分享给大家供大家参考.具体如下: 本插件的宗旨是:用户无需写一行JS验证代码,只需在要验证的表单中加入相应的验证属性即可,让验证功能易维护,可扩展,更容易上手. DEMO中已经包含了常用的正则表达式,可以直接复用,为了考虑扩展性,所以针对不同用户特殊需求,自行写正则吧. EasyValidator实现的功能: 1.提示功能(在表单或者其他标签中加入tip="想提示的文字") 如: 复制代码 代码如下: <inp

Jquery表单验证插件formValidator使用方法_jquery

使用步骤: 1.首先在项目中添加必备js与css   2.代码中添加引用(必备引用) <script src="Scripts/jquery-1.4.1.min.js" type="text/javascript"></script> <!--jquery必须库--> <script src="formValidator1/formValidator-4.0.1.min.js" type="te

一款比较实用齐全的jQuery表单验证插件

一款比较实用,并且验证类型齐全的jQuery表单验证插件.英文版原作者@Vanadium,由我做中文整理.E文水平有限,如果翻译的有问题的,请大家指出,在此感谢~ 可以验证哪些? 文字,日期,邮箱,网址,数字,AJAX用户名验证以及自定义的正则等等几乎所有我们要用到的验证. 不多说,看DEMO吧:点些下载 如何使用? 第一步,当然是和使用其他jQuery插件一样,引入插件文件vanadium.js;第二步,根据你表单要使用的验证方法,在你的表单中加入对应的验证挂钩.比如你想使下面的表单为必填项: