为按钮和表单绑定事件常用的两种方式

前言

在编写代码时,我们难免需要为一些按钮和表单绑定事件,以实现一些相应的功能,那么常用的事件有哪些呢,它们常用的绑定方式又是怎样的呢?接下来我们就来一起学习一下事件。

一、常用事件

事件名说明
onclick鼠标点击事件
onblur元素失去焦点
onfocus元素获得焦点
onload某个页面或者图像完成加载
onsubmit当表单提交时触发该事件
onkeydown某个键盘的键被按下
onmouseover鼠标被移到某元素之上
onmouseout鼠标从某元素移开

二、常用事件绑定方式

2.1 常用事件绑定方式一

在此无论是第一种方式还是第二种方式,笔者均以onblur()失去焦点事件举例

绑定方式一通过HTML标签中的事件属性进行绑定

<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
    <title>事件绑定练习</title>
</head>
<body>
    <form id="form1" method="post" action="#" onsubmit="form_checking()">
        <table>
            <tr>
                <th><label>用户姓名:</label></th>
                <th>
                    <input id="usernameInput" type="text" name="username" onblur="username_checking()"/><br>
                    <span id="usernameErr" style="display: none"><font color="red">用户名错误!!!</font></span>
                </th>
            </tr>
            <tr>
                <th><label>用户密码:</label></th>
                <th>
                    <input id="passwordInput" type="password" name="password" onblur="password_checking()"/><br>
                    <span id="passwordErr" style="display: none"><font color="red">密码错误!!!</font></span>
                </th>
            </tr>
            <tr>
                <th><input  type="submit" name="submit" value="登录"/></th>
                <th><input  type="reset" name="reset" value="重置"/></th>
            </tr>
        </table>
    </form>

    <script>
        function username_checking(){
            //设置返回值,以供onsubmit()提交表单使用
            var flag=false;
            //通过id获取用户名输入框元素对象
            var usernameInputEle = document.getElementById("usernameInput");
            //通过id获取用户名错误判定元素对象
            var usernameErrEle = document.getElementById("usernameErr");
            //获取用户名输入框元素对象的输入值
            var username = usernameInputEle.value;
            if(username!=null&&username!=""){
                //如果用户名不为空和空字符串,则用户名错误判定元素对象不展示
                usernameErrEle.style.display="none";
                flag=true;
            }else{
                //如果用户名为空或者空字符串,则用户名错误判定元素对象展示
                usernameErrEle.style.display="inline";
                flag=false;
            }
            return flag;
        }
        function password_checking(){
            //设置返回值,以供onsubmit()提交表单使用
            var flag=false;
            //通过id获取密码输入框元素对象
            var passwordInputEle = document.getElementById("passwordInput");
            //通过id获取密码错误判定元素对象
            var passwordErrEle = document.getElementById("passwordErr");
            //获取密码输入框元素对象的输入值
            var password = passwordInputEle.value;
            if(password!=null&&password!=""){
                //如果密码不为空和空字符串,则密码错误判定元素对象不展示
                passwordErrEle.style.display="none";
                flag=true;
            }else{
                //如果密码为空或者空字符串,则密码错误判定元素对象展示
                passwordErrEle.style.display="inline";
                flag=false;
            }
            return flag;
        }
        function form_checking(){
            return username_checking() && password_checking();
        }
    </script>
</body>
</html>

运行结果:

请添加图片描述


2.2 常用事件绑定方式二

在此无论是第一种方式还是第二种方式,笔者均以onblur()失去焦点事件举例

绑定方式二通过DOM元素属性进行绑定

<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
    <title>事件绑定练习</title>
</head>
<body>
<form id="form1" method="post" action="#">
    <table>
        <tr>
            <th><label>用户姓名:</label></th>
            <th>
                <input id="usernameInput" type="text" name="username"/><br>
                <span id="usernameErr" style="display: none"><font color="red">用户名错误!!!</font></span>
            </th>
        </tr>
        <tr>
            <th><label>用户密码:</label></th>
            <th>
                <input id="passwordInput" type="password" name="password"/><br>
                <span id="passwordErr" style="display: none"><font color="red">密码错误!!!</font></span>
            </th>
        </tr>
        <tr>
            <th><input  type="submit" name="submit" value="登录"/></th>
            <th><input  type="reset" name="reset" value="重置"/></th>
        </tr>
    </table>
</form>

<script>
    //通过id获取用户名输入框元素对象
    var usernameInputEle = document.getElementById("usernameInput");
    //为用户输入框绑定事件
    usernameInputEle.onblur=username_checking;
    function username_checking(){
        //设置返回值,以供onsubmit()提交表单使用
        var flag=false;
        //通过id获取用户名错误判定元素对象
        var usernameErrEle = document.getElementById("usernameErr");
        //获取用户名输入框元素对象的输入值
        var username = usernameInputEle.value;
        if(username!=null&&username!=""){
            //如果用户名不为空和空字符串,则用户名错误判定元素对象不展示
            usernameErrEle.style.display="none";
            flag=true;
        }else{
            //如果用户名为空或者空字符串,则用户名错误判定元素对象展示
            usernameErrEle.style.display="inline";
            flag=false;
        }
        return flag;
    }

    //通过id获取密码输入框元素对象
    var passwordInputEle = document.getElementById("passwordInput");
    //为密码输入框绑定事件
    passwordInputEle.onblur=password_checking;
    function password_checking(){
        //设置返回值,以供onsubmit()提交表单使用
        var flag=false;
        //通过id获取密码错误判定元素对象
        var passwordErrEle = document.getElementById("passwordErr");
        //获取密码输入框元素对象的输入值
        var password = passwordInputEle.value;
        if(password!=null&&password!=""){
            //如果密码不为空和空字符串,则密码错误判定元素对象不展示
            passwordErrEle.style.display="none";
            flag=true;
        }else{
            //如果密码为空或者空字符串,则密码错误判定元素对象展示
            passwordErrEle.style.display="inline";
            flag=false;
        }
        return flag;
    }

    //通过id获取表单元素对象
    var formEle = document.getElementById("form1");
    //为表单绑定事件
    formEle.onsubmit=form_checking;
    function form_checking(){
        return username_checking() && password_checking();
    }
</script>
</body>
</html>

运行结果:

请添加图片描述


三、onsubmit()表单事件特别绑定方式

在讲述表单事件特别绑定方式之前,我们先来完整运行上述两种绑定代码

事件绑定方式一完整运行:(我们看到onsubmit()无法起到表单格式有误时阻止提交的作用
请添加图片描述


事件绑定方式二完整运行:(我们看到onsubmit()可以起到表单格式有误时阻止的功能

请添加图片描述


通过运行结果我们可以看出,事件绑定一方式运行的效果并不是我们想要的,我们想要的是若用户名输入框或者密码输入框有一项不符合输入要求时,表单应做到无法提交,但目前来看表单无法阻止提交,也就是说onsubmit()并没有起到真正地作用,那么如何使之真正地起作用呢?接下来我们来看如何使onsubmit()真正地起作用

3.1 事件绑定方式一使得onsubmit()真正起效

事件绑定方式一:直接在元素框中添加事件,完成事件绑定

改动之处:实际上就是在方法前面加了一个return
在这里插入图片描述


完整代码:

<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
    <title>事件绑定练习</title>
</head>
<body>
    <form id="form1" method="post" action="#" onsubmit="return form_checking()">
        <table>
            <tr>
                <th><label>用户姓名:</label></th>
                <th>
                    <input id="usernameInput" type="text" name="username" onblur="username_checking()"/><br>
                    <span id="usernameErr" style="display: none"><font color="red">用户名错误!!!</font></span>
                </th>
            </tr>
            <tr>
                <th><label>用户密码:</label></th>
                <th>
                    <input id="passwordInput" type="password" name="password" onblur="password_checking()"/><br>
                    <span id="passwordErr" style="display: none"><font color="red">密码错误!!!</font></span>
                </th>
            </tr>
            <tr>
                <th><input  type="submit" name="submit" value="登录"/></th>
                <th><input  type="reset" name="reset" value="重置"/></th>
            </tr>
        </table>
    </form>

    <script>
        function username_checking(){
            //设置返回值,以供onsubmit()提交表单使用
            var flag=false;
            //通过id获取用户名输入框元素对象
            var usernameInputEle = document.getElementById("usernameInput");
            //通过id获取用户名错误判定元素对象
            var usernameErrEle = document.getElementById("usernameErr");
            //获取用户名输入框元素对象的输入值
            var username = usernameInputEle.value;
            if(username!=null&&username!=""){
                //如果用户名不为空和空字符串,则用户名错误判定元素对象不展示
                usernameErrEle.style.display="none";
                flag=true;
            }else{
                //如果用户名为空或者空字符串,则用户名错误判定元素对象展示
                usernameErrEle.style.display="inline";
                flag=false;
            }
            return flag;
        }
        function password_checking(){
            //设置返回值,以供onsubmit()提交表单使用
            var flag=false;
            //通过id获取密码输入框元素对象
            var passwordInputEle = document.getElementById("passwordInput");
            //通过id获取密码错误判定元素对象
            var passwordErrEle = document.getElementById("passwordErr");
            //获取密码输入框元素对象的输入值
            var password = passwordInputEle.value;
            if(password!=null&&password!=""){
                //如果密码不为空和空字符串,则密码错误判定元素对象不展示
                passwordErrEle.style.display="none";
                flag=true;
            }else{
                //如果密码为空或者空字符串,则密码错误判定元素对象展示
                passwordErrEle.style.display="inline";
                flag=false;
            }
            return flag;
        }
        function form_checking(){
            return username_checking() && password_checking();
        }
    </script>
</body>
</html>

运行效果:(我们看到onsubmit()可以起到表单格式有误时阻止的功能
请添加图片描述


四、常见事件绑定小Bug

当我们没有正确使用事件绑定事件时,例如绑定事件一的绑定方法需要加上(),而我们不加()则会出现问题;事件绑定方式二的绑定方法不需要加上(),而我们加上()也会出现问题

4.1 绑定事件一不规范引发的Bug

若我们使用绑定事件方式一绑定事件,但不给绑定方法加上():
在这里插入图片描述


运行效果:(我们发现方法会失效

请添加图片描述


4.2 绑定事件二不规范引发的Bug

若我们使用绑定事件方式二绑定事件,但给绑定方法加上了():

请添加图片描述


运行效果:(同样我们发现方法会失效,并且onblur()事件会被直接触发且失效

请添加图片描述


因此,我们一定要规范正确的使用事件绑定!!!

五、总结

当我们使用事件绑定方式一绑定事件时,事件属性通通加上()

在这里插入图片描述


当我们使用事件绑定方式二绑定事件时,元素属性通通不加()

在这里插入图片描述


OK!!!结束!!!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值