表单事件

发布于 2020-04-13  764 次阅读


input事件

获取焦点   focus

当 标签获取焦点时,执行的执行
鼠标一点,就是获取焦点

不是所有的标签都支持获取焦点事件

常用: input,select,textarea,button,a,

输入事件   input

在输入框输入内容时,触发事件
每输入一个字符,没按动一次键盘,都会触发 输入事件

失去焦点   change

触发条件有两个条件,两个条件必须都满足才会触发事件

1.必须失去焦点
2.输入的数据内容,必须有改变

表单demo

htmlcssjs
        <form action="./02_demo.html" method="get">
            账号 : <input type="text" name="username" maxlength="16" placeholder="请输入8-16位账号"><br>
    
            <div name="name">请您输入8-16位的账号</div>
    
    
            密码 : <input type="password" name="userpwd1" maxlength="16" placeholder="请输入8-16位密码"><br>
            <div name="pwd1">请您输入8-16位的密码</div>
            确认密码 : <input type="password" name="userpwd2" maxlength="16" placeholder="请再次输入密码"><br>
    
            <div name="pwd2">请您再次输入密码</div>
    
            <button>注册</button>
        </form>
        div{
            display: none;
            margin: 20px 0 ;
        }
        // 1.获取标签对象
        // 3个input标签对象
        var oIptName = document.querySelector('[name="username"]');
        var oIptPwd1 = document.querySelector('[name="userpwd1"]');
        var oIptPwd2 = document.querySelector('[name="userpwd2"]');
        // 3个div标签对象
        var oDivName = document.querySelector('[name="name"]');
        var oDivPwd1 = document.querySelector('[name="pwd1"]');
        var oDivPwd2 = document.querySelector('[name="pwd2"]');

        // 2.添加 获取焦点事件 
        // 鼠标点击标签,获取焦点时,执行的程序
        oIptName.onfocus = function(){
            // 让 对应的div 样式设定为 display:block
            oDivName.style.display = 'block';
        }
        oIptPwd1.onfocus = function(){
            // 让 对应的div 样式设定为 display:block
            oDivPwd1.style.display = 'block';
        }
        oIptPwd2.onfocus = function(){
            // 让 对应的div 样式设定为 display:block
            oDivPwd2.style.display = 'block';
        }

        // 3.输入事件 每次敲击键盘,都会触发input事件
        // 输入字符,提示还有几个字符可以输入
        oIptName.oninput = function(){
            // 获取标签中输入的内容
            var nameStr = oIptName.value;
            // 字符串都有length属性,属性值就是字符串长度,就是字符个数
            // 根据输入的内容,改变div中标签内容

            oDivName.innerHTML = `您需要至少输入8个字符,您当前输入了${nameStr.length}个字符,最多输入16个字符,还可以输入${16-nameStr.length}个字符`;

        }
        oIptPwd1.oninput = function(){
            // 获取标签中输入的内容
            var pwd1Str = oIptPwd1.value;
            // 根据输入字符长度,输入提示信息
            oDivPwd1.innerHTML = `您需要至少输入8个字符,您当前输入了${pwd1Str.length}个字符,最多输入16个字符,还可以输入${16-pwd1Str.length}个字符`;

        }
        oIptPwd2.oninput = function(){
            // 获取标签中输入的内容
            var pwd2Str = oIptPwd2.value;
            // 根据输入字符长度,输入提示信息
            oDivPwd2.innerHTML = `您需要至少输入8个字符,您当前输入了${pwd2Str.length}个字符,最多输入16个字符,还可以输入${16-pwd2Str.length}个字符`;

        }

        // 4.失去焦点事件
        // 1,失去焦点,2,输入内容改变,才会触发事件
        oIptName.onchange = function(){
            // 1, 获取输入的数据
            var nameStr = oIptName.value;

            // 2, 根据输入数据的长度做判断
            if( nameStr.length < 8 ){
                // 错误格式,提示信息

                // 修改input字体样颜色为红色,边框线为红色
                oIptName.style.color = 'red';
                oIptName.style.borderColor = 'red';

                // 修改div中的提示信息
                oDivName.style.color = 'orange';
                oDivName.innerHTML = '您输入的账号格式不符合要求,请检查,并且重新输入';
            }else{
                // 正确格式的提示信息
                oDivName.style.color = 'pink';
                oDivName.innerHTML = '亲,您输入的内容,格式完全正确,棒棒哒,么么哒, ^_^!!!';

            }
        }
        // 5.确认密码必须要和原始密码完全相同
        // ===  严格区分大小写
        oIptPwd2.onchange = function(){
            // 1,获取数据 获取 密码框 和 确认密码框 输入的数据
            var pwd1Str = oIptPwd1.value;
            var pwd2Str = oIptPwd2.value;

            if(pwd1Str === pwd2Str){
                oDivPwd2.innerHTML = '密码和确认密码相同';
            }else{
                oDivPwd2.innerHTML = '密码和确认密码不同';
            }
        }

submit提交事件

点击 form表单中 提交按钮 会触发事件
触发事件,首先执行的是JavaScript定义的默认事件---提交表单数据

可以通过   事件对象 e.preventDefault() ; 来 阻止默认事件的执行

submit事件demo

htmlcssjs
        <form action="./02_demo.html" method="get">
            账号 : <input name="username" type="text"> <span name="name"></span> <br>
            密码 : <input name="userpwd" type="password"> <span name="pwd"></span> <br>
            验证码 : <input name="uservc" type="text"> <span name="vc"></span>  <span name="vvcc"></span>  <br>
            <button>注册</button>
        </form>
        //自己写
        // 获取标签对象
        var oIptName = document.querySelector('[name="username"]');
        var oIptPwd = document.querySelector('[name="userpwd"]');
        var oIptVc = document.querySelector('[name="uservc"]');
        var oSpanVc = document.querySelector('[name="vc"]');
        var oForm = document.querySelector('form');
        var oSpanName = document.querySelector('[name="name"]');
        var oSpanPwd = document.querySelector('[name="pwd"]');
        var oSpanVVCC = document.querySelector('[name="vvcc"]');

        // 1,添加验证码
        oSpanVc.innerHTML = setVc();
        // 点击 span标签,可以切换新的验证码
        oSpanVc.onclick = function(){
            oSpanVc.innerHTML = setVc();
        }

        // 给form表单,添加 submit 提交事件
        oForm.onsubmit = function(e){
            // 提交事件,应该先做验证
            // 如果 验证没有通过 就不执行之后的程序

            // 目前只能验证,输入数据的长度,对于内容的验证,使用正则表达式会更简单
            // 目前验证,输入数据的长度和不能是空字符串

            // 获取,账号,密码,验证码输入的数据
            var nameVal = oIptName.value;
            var pwdVal = oIptPwd.value;
            var vcVal = oIptVc.value;
            // 1,输入的账号进行验证
            // 账号验证, 不能为空字符串 , 长度必须是 8-16 位
            // 如果是 空字符串 或者 长度不在 8-16位 之间 我们就阻止表单的提交
            if( nameVal === '' || !( nameVal.length >= 8 && nameVal.length <= 16 )   ){
                e.preventDefault() ;
                // 在 name的 span 中,写入提示信息
                oSpanName.innerHTML = '您输入的账号不符和格式'
            }else{
                // 符合格式,输入空字符串,替换错误提示
                oSpanName.innerHTML = '';
            }
            // 密码验证 不能为空字符串 , 长度必须是 8-16 位
            if( pwdVal === '' || !( pwdVal.length >= 8 && pwdVal.length <= 16 )   ){
                e.preventDefault() ;
                // 在 pwd的 span 中,写入提示信息
                oSpanPwd.innerHTML = '您输入的密码不符和格式'
            }else{
                // 符合格式,输入空字符串,替换错误提示
                oSpanPwd.innerHTML = '';
            }
            // 验证码  输入的字符串不能为空
            if( vcVal === ''){
                e.preventDefault() ;
                // 在 验证码的span 中,写入提示信息
                oSpanVVCC.innerHTML = '您输入的验证码不能为空'
            // 验证码 input中输入的数据,必须 和 之后 span 中写入的 字符串相同 
            // 如果不相同,就阻止表单的提交
            // 如果要区分大小写,大小写敏感,直接 ===判断就可以
            // 如果不分区大小写,大小写不敏感,可以统一都转化为大写或者小写
            }else if( vcVal.toUpperCase() !== oSpanVc.innerHTML.toUpperCase() ){
                e.preventDefault() ;
                oSpanVVCC.innerHTML = '您输入的验证码错误'

            }else{
                // 符合格式,输入空字符串,替换错误提示
                oSpanVVCC.innerHTML = '';
            } 
        }
        // 随机6位验证码  没有重复的字符
        function setVc(){
            var str = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
            var vc = '';
            for(var i = 1 ; i <= 6 ; i++){
                // 从 0 - str.length-1 的所有索引下标的随机数
                var num = parseInt( Math.random()*str.length );
                if(vc.indexOf( str[num] ) === -1 ){
                    vc += str[num];
                }else{
                    i--;
                }
            }
            return vc;
        }

提示

1, 必须要记住, submit 提交事件,是绑定给 form表单标签

不是绑定给 button标签

2, 目前只能做长度和空字符串的验证

内容的验证,要是用正则表达式来执行

3, 验证码:

(1) 随机验证码直接写入到 span标签中
比较判断的是 input输入框,输入的数据,与span标签的内容,是否一致
(2) 如果要区分大小写,就直接 === 判断
如果不要区分大小写,将字符串统一为大写,或者小写字符串

一沙一世界,一花一天堂。君掌盛无边,刹那成永恒。