(转)表单验证 - jQuery 实现

——选自《锋利的jQuery》(第2版)第5章的例题 

5.1.5 表单验证

表单作为HTML最重要的一个组成部分,几乎在每个网页上都有体现,例如用户提交信息、用户反馈信息和用户查询信息等,因此它是网站管理者与浏览者之间沟通的桥梁。在表单中,表单验证的作用也是非常重要的,它能使表单更加灵活、美观和丰富。       以一个简单的用户注册为例。首先新建一个表单,HTML代码如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html lang="zh" lang="zh" xml:lang="zh" xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8">
    <title>jQueryStudy</title>
    <style type="text/css">
     .int{ height: 30px; text-align: left; width: 600px; }
     label{ width: 200px; margin-left: 20px; }
     .high{ color: red; }
     .msg{ font-size: 13px; }
     .onError{ color: red; }
     .onSuccess{ color: green; }
    </style>
    <script type="text/javascript" src="jquery-1.7.1.js"></script>
</head>
<body>
    <form method="post" action="">
        <div class="int">
            <label for="username">用户:</label>
            <input type="text" id="username" class="required" />
        </div>
        <div class="int">
            <label for="email">邮箱:</label>
            <input type="text" id="email" class="required" />
        </div>
        <div class="int">
            <label for="personinfo">资料:</label>
            <input type="text" id="personinfo" />
        </div>
        <div class="int">
            <input type="submit" value="提交" id="send"style="margin-left: 70px;" />
            <input type="reset"  value="重置" id="res" />
        </div>
    </form>
</body>
</html>

显示效果如图 1 所示。

图 1 表单初始化

在表单内 class 属性为 “required” 的文本框是必须填写的,因此需要将它与其他的非必须填写的表单元素加以区别,即在文本框后面追加一个红色的星号标识。可以使用 append() 方法来完成,代码如下:

//为表单的必填文本框添加提示信息
$("form :input.required").each(function(){
    var $required = $("<strong class=‘high‘>*</strong>"); //创建元素
    $(this).parent().append($required); //将它追加到文档中
});

显示效果如图 2 所示。

图 2 红色星星标识

当用户在“用户名”文本框中填写完信息后,将光标的焦点从“用户名”移出时,需要即时判断用户名是否符合验证规则。当光标的焦点从“邮箱”文本框移出时,需要即时判断“邮箱”填写是否正确,因此需要给表单元素添加失去焦点事件,即blur。jQuery代码如下:

$("form :input").blur(function(){ //为表单的元素添加失去焦点事件
    // ...省略代码
})

验证表单元素步骤如下。

(1)判断当前失去焦点的元素是“用户名”还是“邮箱”,然后分别处理。

(2)如果是“用户名”,判断元素的值的长度是否小于6,如果小于6,则用红色提醒用户输入不正确;反之,则用绿色提醒用户输入正确。

(3)如果是“邮箱”,判断元素的值是否符合邮箱的格式,如果不符合,则用红色提醒用户输入不正确,反之,则用绿色提醒用户输入正确。

(4)将提醒信息追加到当前的父元素的最后。     根据以上分析,可以写出如下jQuery代码:

//为表单元素添加失去焦点事件
$("form :input").blur(function(){
    var $parent = $(this).parent();
    //验证用户名
    if($(this).is("#username")){
        if(this.value=="" || this.value.length<6){
            var errorMsg = " 请输入至少6位的用户名!";
            //class=‘msg onError‘ 为层叠样式
            $parent.append("<span class=‘msg onError‘>"+errorMsg+"</span>");
        }
        else{
            var okMsg=" 输入正确";
            $parent.find(".high").remove();
            $parent.append("<span class=‘msg onSuccess‘>"+okMsg+"</span>");
        }
    }
    //验证邮箱
    if($(this).is("#email")){
        if(this.value=="" || (this.value!="" && !/[email protected]+\.[a-zA-Z]{2,4}$/.test(this.value))){
            var errorMsg = " 请输入正确的E-Mail地址!";
            $parent.append("<span class=‘msg onError‘>"+errorMsg+"</span>");
        }
        else{
            var okMsg=" 输入正确";
            $parent.find(".high").remove();
            $parent.append("<span class=‘msg onSuccess‘>"+okMsg+"</span>");
        }
    }
});

当连续几次输入错误的格式后,会出现如图 3 所示的效果

图 3 操作多次的提示效果

由于每次在元素失去焦点后,都会创建一个新的提醒元素,然后将它追加到文档中,最后就出现了多次的提醒信息。因此,需要在创建提醒元素之前,将当前元素以前的提醒元素都删除。可以使用remove()方法来完成,代码如下:

//为表单元素添加失去焦点事件
$("form :input").blur(function(){
    var $parent = $(this).parent();
    $parent.find(".msg").remove(); //删除以前的提醒元素
    // ...省略代码
});

显示效果如图 4 所示。

图 4 正确的效果

当鼠标在表单元素中多次失去焦点时,都可以提醒用户填写是否正确。但是,如果用户无视错误提醒,执意要单击“提交”按钮时,为了使表单填写准确,在表单提交之前,需要对表单的必须填写元素进行一次整体的验证。可以直接用trigger()方法来触发blur事件,从而达到验证效果。如果填写错误,就会以红色提醒用户;如果用户名和邮箱都不符合规则,那么就有两处错误,即有两个class和“onError”的元素,因此可以根据class为“onError”元素的长度来判断是否可以提交。如果长度为0,即true,说明已经可以提交了;如果长度大于0,即false,说明有错误,需要阻止表单提交。阻止表单提交可以直接用“return false”语句。       根据上面的分析,可以在提交事件中写出如下jQuery代码:

//点击重置按钮时,触发文本框的失去焦点事件
$("#send").click(function(){
    $("form .required:input").trigger("blur");  //trigger 事件执行完后,浏览器会为submit按钮获得焦点
    var numError = $("form .onError").length;
    if(numError){
        return false;
    }
    alert("注册成功,密码已发到你的邮箱");
});   

显示效果如图 5 所示。

图 5 正确提交

用户也许会提出:为什么每次都要等字段元素失去焦点后,才提醒是否正确?如果输入时就可以提醒,这样就可以更加即时了。

为了达到用户提出的需求,需要给表单元素绑定 keyup 事件和 focus 事件,keyup 事件能在用户每次松开按键时触发,实现即时提醒;focus 事件能在元素得到焦点的时候触发,也可以实现即时提醒。

代码如下:

$("form :input").blur(function(){
    //失去焦点处理函数
    //代码省略...
}).keyup(function(){
    $(this).triggerHandler("blur"); //triggerHandler 防止事件执行完后,浏览器自动为标签获得焦点
}).focus(function(){
    $(this).triggerHandler("blur");
});

这样当用户将光标定位到文本框上和改变文本框的值时,表单就会即时提醒用户填写是否正确,从而符合了用户的需求。

在前面的章节已经提过,trigger(“blur”)不仅会触发为元素绑定的blur事件,也会触发浏览器默认的blur事件,即不能讲光标定位到文本框上。而triggerHandler(“blur”)只会触发为元素绑定的blur事件,而不触发浏览器默认的blur事件。

至此,表单验证过程就全部完成。读者可以根据自己的实际需求修改验证规则。

(注:客户端的验证仅用于提升用户的操作体验,而服务器仍需对用户输入的数据的合法性进行校验。对于禁用了脚本的用户和用户自制的网页提交操作,必须在服务器端验证)

完整代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html lang="zh" lang="zh" xml:lang="zh" xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8">
    <title>jQueryStudy</title>
    <style type="text/css">
     .int{ height: 30px; text-align: left; width: 600px; }
     label{ width: 200px; margin-left: 20px; }
     .high{ color: red; }
     .msg{ font-size: 13px; }
     .onError{ color: red; }
     .onSuccess{ color: green; }
    </style>
    <script type="text/javascript" src="jquery-1.7.1.js"></script>
</head>
<body>
    <form method="post" action="">
        <div class="int">
            <label for="username">用户:</label>
            <input type="text" id="username" class="required" />
        </div>
        <div class="int">
            <label for="email">邮箱:</label>
            <input type="text" id="email" class="required" />
        </div>
        <div class="int">
            <label for="personinfo">资料:</label>
            <input type="text" id="personinfo" />
        </div>
        <div class="int">
            <input type="submit" value="提交" id="send"style="margin-left: 70px;" />
            <input type="reset"  value="重置" id="res" />
        </div>
    </form>
    <script type="text/javascript">
    $(document).ready(function(){
        //为表单的必填文本框添加提示信息
        $("form :input.required").each(function(){
            var $required = $("<strong class=‘high‘>*</strong>"); //创建元素
            $(this).parent().append($required); //将它追加到文档中
        });

        //为表单的必填文本框添加blur事件、keyup事件和focus事件
        $("form :input").blur(function(){
            var $parent = $(this).parent();
            $parent.find(".msg").remove(); //删除以前的提醒元素
            //验证用户名
            if($(this).is("#username")){
                if(this.value=="" || this.value.length<6){
                    var errorMsg = " 请输入至少6位的用户名!";
                    //class=‘msg onError‘ 为层叠样式
                    $parent.append("<span class=‘msg onError‘>"+errorMsg+"</span>");
                }
                else{
                    var okMsg=" 输入正确";
                    $parent.find(".high").remove();
                    $parent.append("<span class=‘msg onSuccess‘>"+okMsg+"</span>");
                }
            }
            //验证邮箱
            if($(this).is("#email")){
                if(this.value=="" || (this.value!="" && !/[email protected]+\.[a-zA-Z]{2,4}$/.test(this.value))){
                    var errorMsg = "请输入正确的E-Mail地址!";
                    $parent.append("<span class=‘msg onError‘>"+errorMsg+"</span>");
                }
                else{
                    var okMsg=" 输入正确";
                    $parent.find(".high").remove();
                    $parent.append("<span class=‘msg onSuccess‘>"+okMsg+"</span>");
                }
            }
        }).keyup(function(){
            $(this).triggerHandler("blur"); //triggerHandler 防止事件执行完后,浏览器自动为标签获得焦点
        }).focus(function(){
            $(this).triggerHandler("blur");
        });

        //点击重置按钮时,触发文本框的失去焦点事件
        $("#send").click(function(){
            $("form .required:input").trigger("blur");  //trigger 事件执行完后,浏览器会为submit按钮获得焦点
            var numError = $("form .onError").length;
            if(numError){
                return false;
            }
            alert("注册成功,密码已发到你的邮箱");
        });
    });
    </script>
</body>
</html> 
时间: 2024-08-05 15:25:53

(转)表单验证 - jQuery 实现的相关文章

JQuery 表单验证--jquery validation

jquery validation,表单验证控件 官方地址 :http://jqueryvalidation.org/ jquery表单验证 默认值校验规则 jquery表单验证 默认的提示 1 <html> 2 <head> 3 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 4 <title>jQuery validatio

表单验证——jquery validate使用说明【另一个教程】

[参考:http://www.tuicool.com/articles/y6fyme] jQuery Validate jQuery Validate 插件为表单提供了强大的验证功能,让客户端表单验证变得更简单,同时提供了大量的定制选项,满足应用程序各种需求.该插件捆绑了一套有用的验证方法,包括 URL 和电子邮件验证,同时提供了一个用来编写用户自定义方法的 API.所有的捆绑方法默认使用英语作为错误信息,且已翻译成其他 37 种语言. 该插件是由 Jörn Zaefferer 编写和维护的,他

表单验证——jquery validate使用说明

//validate 选项*********************************************************** $("form").validate({ debug:true //进行调试模式(表单不提交) rules:{ name:"required", //自定义规则,key:value的形式,key是要验证的元素,value可以是字符串或对象 email:{ //内置验证方式 required:true, //必填项 requ

jQuery html5Validate基于HTML5表单验证插件

一.前言 前3篇文章实际都是为本文做铺垫的,如果以下棋表示,前三篇是普通走棋,本篇是将军! 目前市面上有不少表单验证插件,看似强大,实在糟糕! 总结下,有以下一些问题: 过多干预包括:改变了表单元素UI, 为表单元素绑定过多事件等 布局等限制包括:需要特定结构的布局,需要特定的类名或者ID 学习成本包括:N多元作者自定义的属性,或者自定义的特定的数据结构 可用性 当JS出现错误的时候而无法正常运作的时候,验证就是聋子的耳朵——摆设,即使在现代浏览器下也是如此. 面向未来的表单验证 验证驱动验证信

Day17 表单验证、滚动菜单、Django

一.表单验证的两种实现方式 1.DOM绑定 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>表单验证(DOM绑定)</title> <style> .item{ width: 250px; height: 60px; position: relative; } .item input{ wid

jquery插件,表单验证validation plugin的使用

笔记: 一.首先引入插件 <script type="text/javascript" src="js/jquery-1.10.0.js" ></script> <script type="text/javascript" src="js/jquery.validate-1.13.1.js" ></script> 列子:一个简单的登录表单验证 1 <form id=&quo

jQuery基础(常用插件 表单验证,图片放大镜,自定义对象级,jQuery UI,面板折叠)

1.表单验证插件--validate   该插件自带包含必填.数字.URL在内容的验证规则,即时显示异常信息,此外,还允许自定义验证规则,插件调用方法如下: $(form).validate({options}) 其中form参数表示表单元素名称,options参数表示调用方法时的配置对象,所有的验证规则和异常信息显示的位置都在该对象中进行设置.     2.表单插件--form 通过表单form插件,调用ajaxForm()方法,实现ajax方式向服务器提交表单数据,并通过方法中的option

如何利用jQuery进行简单表单验证

如何利用jQuery进行简单表单验证:利用jQuery可以进行表单验证,当然有比较复杂的表单验证,这里就不介绍了,下面就简单介绍一下如何使用jQuery进行简单的表单验证,然后大家可以通过改造进行基本的表达验证了.先看一段代码实例: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="author" content="http

jquery实现表单验证

用jquery实现简单的表单验证 HTML代码: 1 <form action="" method="post" id="form-data"> 2 <div id="content"> 3 <div> 4 <label for="username">用户名:</label> 5 <input type="text" na