jquery表单验证扩展三

(一). 输入范围验证存在问题

在第二篇上提到的问题,在原有的验证中也存在相同的问题。当然在这次改写中也解决了一些这些问题。同时也添加了对radio,checkbox,select 元素的验证。当然对于时间的验证仍没有解决,后续过程中会继续补充!

 

(二). 验证参数的设计

onEmptyText: 当输入内容为空的时候显示文本

onEmptyClass: 当输入内容为空的时候显示样式

onSuccessText: 当验证成功的时候显示的文本

onSuccessClass: 当验证成功的时候显示的样式

onErrorText:当验证失败的时候显示的文本

onErrorClass:当验证失败的时候显示的样式

onFocusText: 当获得焦点的时候显示的文本

onFocusClass:当获得焦点的时候显示的样式

dataType:输入的数据类型

min:输入的最小值

max:输入的最大值

targetId:显示提示消息的元素id 

改写的部分就是将提示性文字和样式都单独隔离出来,可以更好灵活的操作表单验证!

改写的文章支持text,number,date 三种 数据形式,而且在radio,checkbox,select的验证也有更新。

radio,checkbox ,select 验证只是验证是否选中,而且这里的select 对于blur 事件并不敏感,所以这里采用的change事件来验证比较好。 

(三)源码:

jQuery检查输入项的范围 源码解析



Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->/**

 * onEmptyText: 当输入内容为空的时候显示文本

 * onEmptyClass: 当输入内容为空的时候显示样式

 * onSuccessText: 当验证成功的时候显示的文本

 * onSuccessClass: 当验证成功的时候显示的样式

 * onErrorText:当验证失败的时候显示的文本

 * onErrorClass:当验证失败的时候显示的样式

 * onFocusText: 当获得焦点的时候显示的文本

 * onFocusClass:当获得焦点的时候显示的样式

 * dataType:输入的数据类型

 * min:输入的最小值

 * max:输入的最大值

 * targetId:显示提示消息的元素id

 * @param {Object} inputArg

 */

$.fn.extend({

    checkRange:function(inputArg){

        //绑定焦点事件

        $(this).bind("focus",function(){

            var flag=true;

            if($(this).is("input") || $(this).is("textarea")){

                if($(this).attr("type")=="radio" || $(this).attr("type")=="checkbox"){

                    var name=$(this).attr("name");

                    var items=$('input[@name=""+name+""][checked]');

                    if(items.length>0){

                        flag=false;

                    }

                }else{

                    if($(this).val()!=undefined && $(this).val()!=""){

                        flag=false;

                    }

                }

            }else{ //select  需要改进 select没有focus事件,应该改为change事件

                

            }

            if (flag) {

                //显示获得焦点文本

                addText(inputArg.targetId, inputArg.onFocusText);

                //切换样式

                addClass(inputArg.targetId, inputArg.onFocusClass);

            }

        });

        

        //绑定失去焦点事件

        $(this).bind("blur",function(){

             var flag=false;

             if($(this).is("input") || $(this).is("textarea")){

                 if($(this).attr("type")=="radio" || $(this).attr("type")=="checkbox"){

                    var name=$(this).attr("name");

                    var items=$('input[@name=""+name+""][checked]');

                    if(items!=undefined && items.length>=inputArg.min && items.length<inputArg.max){

                        flag=true;

                    }

                }else{

                    var value=$(this).val();

                    if (value == undefined || value == "") {

                        //显示获得焦点文本

                        addText(inputArg.targetId,inputArg.onEmptyText);

                        //切换样式

                        addClass(inputArg.targetId,inputArg.onEmptyClass);

                    }else {

                        switch (inputArg.dataType) {

                            case "text":

                                if(value.length < inputArg.min || value.length >= inputArg.max){

                                    flag=false;

                                }else{

                                    flag=true;

                                }

                                break;

                            case "number":

                                if (isNaN(value)) {

                                    flag = false;

                                }

                                else {

                                    if (value < inputArg.min || value >= inputArg.max) {

                                        flag = false;

                                    }

                                    else {

                                        flag = true;

                                    }

                                }

                                break;

                            case "date":

                                break;

                        }

                    }

                }

             }else{  //select 

                 

             }

             if(flag){

                //显示获得焦点文本

                addText(inputArg.targetId, inputArg.onSuccessText);

                //切换样式

                addClass(inputArg.targetId, inputArg.onSuccessClass);

             }else{

                //显示获得焦点文本

                addText(inputArg.targetId, inputArg.onErrorText);

                //切换样式

                addClass(inputArg.targetId, inputArg.onErrorClass);

             }

        });

        

        //select 选择框选择事件

        if ($(this).is("select")) {

            $(this).bind("change", function(){

                var items=$(this).find("option:selected");

                if(items!=undefined && items.length>=inputArg.min && items.length<inputArg.max){

                    //显示获得焦点文本

                    addText(inputArg.targetId, inputArg.onSuccessText);

                    //切换样式

                    addClass(inputArg.targetId, inputArg.onSuccessClass);

                }else{

                    //显示获得焦点文本

                    addText(inputArg.targetId, inputArg.onErrorText);

                    //切换样式

                    addClass(inputArg.targetId, inputArg.onErrorClass);

                }

            });

        }

    }

});
这里比较重要的是对于select元素的验证,select可以选择多个选中项。radio,checkbox,select 只是验证选择长度,而不会验证text,date 。这是本文很重要的一部分。源码中也做了代码重构,有很多共同部分都提取出来,大大减少了代码量,同时也利用了 jQuery表单验证扩展(二)  中的部分方法。

(四). 提取的共同代码解析

第二篇中的公用方法



Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->/**

 * 根据输入框的不同类型来判断

 * @param {Object} flag

 * @param {Object} inputArg

 */

function addMessage(flag,inputArg){

    if(flag){

        //显示正确信息文本

        addText(inputArg.targetId,inputArg.onSuccessText);

        //切换样式

        addClass(inputArg.targetId,inputArg.onSuccessClass);

    }else{

        //显示错误信息文本

        addText(inputArg.targetId,inputArg.onErrorText);

        //切换样式

        addClass(inputArg.targetId,inputArg.onErrorClass);

    }

}

/**

 * 给目标控件添加显示的文本信息

 * @param {Object} targetId 目标控件id

 * @param {Object} text        需要显示的文本信息

 */

function addText(targetId,text){

    if(text==undefined){

        text="";

    }

    $("#"+targetId).html("        "+text);

}

/**

 * 切换样式

 * @param {Object} targetId 目标控件id

 * @param {Object} className 显示的样式名称

 */

function addClass(targetId,className){

    if(className!=undefined && className!=""){

        $("#"+targetId).removeClass();

        $("#"+targetId).addClass(className);

    }

}

这段代码主要主要用于添加文本提示和样式问题。

对于select元素的验证代码



Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->//select 选择框选择事件

        if ($(this).is("select")) {

            $(this).bind("change", function(){

                var items=$(this).find("option:selected");

                if(items!=undefined && items.length>=inputArg.min && items.length<inputArg.max){

                    //显示获得焦点文本

                    addText(inputArg.targetId, inputArg.onSuccessText);

                    //切换样式

                    addClass(inputArg.targetId, inputArg.onSuccessClass);

                }else{

                    //显示获得焦点文本

                    addText(inputArg.targetId, inputArg.onErrorText);

                    //切换样式

                    addClass(inputArg.targetId, inputArg.onErrorClass);

                }

            });

        }

这段代码用于验证select选择框元素,支持多项选择验证。

 

(五). 验证使用例子

文本框输入验证

  当输入的内容长度不符

 输入的字符串满足当前要求提示

 当不输入文本的时候验证

对于数字的验证

  获得焦点提示问题

 输入的数字不满足范围

 验证成功

对于checkbox的验证

 checkbox组其中之一获得焦点

 选择满足数据

 选择超过数量

对于select 多项选择

 选择数量过多

 验证成功

 

(六). 验证测试代码

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



Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

<html>

    <head>

        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

        <title>Untitled Document</title>

        <link type="text/css" rel="stylesheet" href="new_file.css"/>

        <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").checkRange({

                    onFocusText:"必填项",

                    onFocusClass:"notice",

                    targetId:"txtNameTip",

                    onSuccessText:"验证成功",

                    onSuccessClass:"correct",

                    onErrorText:"你真不听话,请认真填写",

                    onErrorClass:"error",

                    min:6,

                    max:12,

                    dataType:"text"

                });

                

                $("#rdbMan,#rdbWoman").checkRange({

                    onFocusText:"必填项",

                    onFocusClass:"notice",

                    targetId:"txtSexTip"

                });

                

                $("#txtPass2").checkRange({

                    onFocusText:"必填项",

                    onFocusClass:"notice",

                    targetId:"txtPass2Tip",

                    onSuccessText:"验证成功",

                    onSuccessClass:"correct",

                    onErrorText:"你真不听话,请认真填写",

                    onErrorClass:"error",

                    min:10,

                    max:60,

                    dataType:"text"

                });

                

                $("#rdbMan1,#rdbWoman2,,#rdbMan3,,#rdbWoman4").checkRange({

                    onFocusText:"必填项",

                    onFocusClass:"notice",

                    targetId:"txthobbyTip",

                    onSuccessText:"验证成功",

                    onSuccessClass:"correct",

                    onErrorText:"你真不听话,请认真填写",

                    onErrorClass:"error",

                    min:1,

                    max:3,

                    dataType:"text"

                });

                

                

                $("#txtAge").checkRange({

                    onFocusText:"必填项",

                    onFocusClass:"notice",

                    targetId:"txtAgeTip",

                    onSuccessText:"验证成功",

                    onSuccessClass:"correct",

                    onErrorText:"输入的范围为10-60",

                    onErrorClass:"error",

                    min:10,

                    max:60,

                    dataType:"number"

                });

                

                $("#ddlOption").checkRange({

                    onFocusText:"必填项",

                    onFocusClass:"notice",

                    targetId:"ddlOptionTip",

                    onSuccessText:"验证成功",

                    onSuccessClass:"correct",

                    onErrorText:"你真不听话,请认真填写",

                    onErrorClass:"error",

                    min:1,

                    max:2,

                    dataType:"number"

                });

                

                

                $("#rdbMan,#rdbWoman").checkRange({

                    onFocusText:"必填项",

                    onFocusClass:"notice",

                    targetId:"txtSexTip",

                    onSuccessText:"验证成功",

                    onSuccessClass:"correct",

                    onErrorText:"你真不听话,请认真填写",

                    onErrorClass:"error",

                    min:1,

                    max:2,

                    dataType:"number"

                });

            });

        </script>

    </head>

    <body>

        <p>

            <label>姓名:</label><input type="text" id="txtName" value=""/><span id="txtNameTip"></span>

        </p>

        <p>

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

        </p>

        <p>

            <label>描述:</label><textarea id="txtArea"></textarea><span id="txtAreaTip"></span>

        </p>

        <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>

        <p>

            <label>性别:</label>

            <span>

                <input id="rdbMan" type="radio" name="sex" value="男" />男    

                <input id="rdbWoman" type="radio" name="sex" value="女" />女

            </span>

            <span id="txtSexTip"></span>

        </p>

        <p>

            <label>爱好:</label>

            <span>

                <input id="rdbMan1" type="checkbox" name="hobby" value="hobby1" />aa    

                <input id="rdbWoman2" type="checkbox" name="hobby" value="hobby2" />bb   

                <input id="rdbMan3" type="checkbox" name="hobby" value="hobby3" />aa    

                <input id="rdbWoman4" type="checkbox" name="hobby" value="hobby4" />bb   

            </span>

            <span id="txthobbyTip"></span>

        </p>

        <p>

            <label>地区:</label>

            <span>

                <select id="ddlOption" name="area" multiple="multiple">

                    <option value="0">00000</option>

                    <option value="1">11111</option>

                    <option value="2">22222</option>

                    <option value="3">33333</option>

                    <option value="4">44444</option>

                </select>

            </span>

            <span id="ddlOptionTip"></span>

        </p>

    </body>

</html>



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!
提供的源码资源涵盖了小程序应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值