使用jQuery实现表单数据验证

一、$('form  :input')与$('form input')的区别:

1、$('form  :input')返回form中的所有表单对象,包括textarea、select、button等;

$('form input')返回form中的所有input标签对象。

2、form input是属于层级选择器(将每一个选择器匹配到的元素合并后一起返回);

form  :input是属于表单选择器(匹配所有 input、textarea、select、button等)。

二、jQuery 事件 - triggerHandler() 方法

1、定义和用法

triggerHandler()方法触发被选元素的指定事件类型。

triggerHandler()方法与trigger()方法类似。不同的是它不会触发事件的默认行为(比如表单提交),而只影响第一个匹配元素。

与 trigger() 方法相比的不同之处

  • 它不会引起事件的默认行为(比如表单提交);
  • .trigger()会操作jQuery对象匹配的所有元素,而.triggerHandler()只影响第一个匹配元素;
  • 由.triggerHandler()创建的事件不会在DOM树中冒泡;如果目标元素不直接处理它们,则不会发生任何事情。
  • 该方法的返回的是事件处理函数的返回值,而不是具有可链性的 jQuery 对象。此外,如果没有处理程序被触发,则这个方法返回 undefined。

需求:

(1)* 代表必填项

(2)必填项数据为空或者不符合格式要求时,input后面追加红色的 × 符号

(3)必填项数据符合格式要求时,input后面追加红色的  符号

(4)必填项数据完全正确时,表单才可以提交数据,否则不可以提交

 

(1)无操作 

 

 

2)为空时:

 (3)输入数据不符要求时

html

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="css/demo.css">
</head>

<body>
    <div>
        <p>用户注册</p>
        <!--注册表单-->
        <form method="post" action="">
            <div class="int">
                <label for="username">用户名:</label>
                <input type="text" id="username" class="required" />
                <span class="formtips">*</span>
            </div>
            <div class="int">
                <label for="email">邮箱:</label>
                <input type="text" id="email" class="required" />
                <span class="formtips">*</span>
            </div>
            <div class="int">
                <label for="personinfo">个人资料:</label>
                <input type="text" id="personinfo" />
            </div>
            <div class="sub">
                <input type="submit" value="提交" id="send" /><input type="reset" id="res" />
            </div>
        </form>
    </div>


    <script src="js/jquery-3.5.1.min.js"></script>
    <script src="js/demo.js"></script>
</body>

</html>

 css

body {
    font: 12px/19px Arial, Helvetica, sans-serif;
    color: #666;
}

form div {
    margin: 5px 0;
}

.int label {
    float: left;
    width: 100px;
    text-align: right;
}

.int input {
    padding: 1px 1px;
    border: 1px solid #ccc;
    height: 16px;
}

.sub {
    padding-left: 100px;
}

.sub input {
    margin-right: 10px;
}

.formtips {
    margin: 2px;
    padding: 2px;
    color: #f00
}

.onError {
    background: #FFE0E9 url(../images/error.png) no-repeat 0 center;
    padding-left: 25px;
}

.onSuccess {
    background: #E9FBEB url(../images/right.png) no-repeat 0 center;
    padding-left: 25px;
}

.high {
    color: red;
}

.focus {
    border: 1px solid #f00;
    background: #fcc;
}

js

$(function () {
    // 1.如果是必填的,则加红星标识
    // $("form :input.required").each(function () {
    //     var $required = $(" <strong class='high'>*</strong>");//创建元素
    //     $(this).parent().append($required);//然后将它追加到文档中

    // });
    //2.文本框失去焦点后开始验证
    $('form :input').blur(function () {
        var $parent = $(this).parent();
        $parent.find(".formtips").remove();
        //2.1验证用户名
        if ($(this).is("#username")) {
            if (this.value == "" || this.value.length < 6) {
                var errorMsg = '请输入至少6位的用户名.';
                $parent.append('<span class="formtips onError">' + errorMsg + '</span>');
            } else {
                var okMsg = '输入正确.';
                $parent.append('<span class="formtips onSuccess">' + okMsg + '</span>');
            }
        }
        //2.2验证邮件
        if ($(this).is('#email')) {
            if (this.value == "" || (this.value != "" && !/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/.test(this.value))) {
                var errorMsg = '请输入正确的E-Mail地址.';
                $parent.append('<span class="formtips onError">' + errorMsg + '</span>');
            } else {
                var okMsg = '输入正确.';
                $parent.append('<span class="formtips onSuccess">' + okMsg + '</span>');
            }
        }
        //2.3实现一边输入一边验证
    }).keyup(function () {
        //triggerHandler 防止事件执行完后,浏览器自动为标签获得焦点
        $(this).triggerHandler('blur');
    }).focus(function () {
        $(this).triggerHandler('blur');
    });//end blur
    //2.4提交,最终验证。
    $("#send").click(function () {
        //trigger 事件执行完后,浏览器会为submit按钮获得焦点
        $("form :input.required").trigger('blur');
        var numError = $('form .onError').length;
        if (numError) {
            return false;
        }
        alert("注册成功,密码已发到你的邮箱,请查收.");
    });
    //3.重置
    $('#res').click(function () {
        $(".formtips").remove();
    });
    //4.选中输入的时候输入框变色
    $(":input").focus(function(){
        $(this).addClass("focus");
    }).blur(function(){
        $(this).removeClass('focus');
    });
})

  • 1
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值