为什么用户名事件监听没有效果,还有密码框事件 密码强度效果没有显示出来

来源:2-25 项目作业

KaFe_Ming

2021-02-28 16:01:47

    <style>

        *{

            margin0;

            padding0;

        }

        #box{

            width600px;

            height300px;

            borderorange solid 3px;

            border-radius10px;

            positionabsolute;

            top50%;

            margin-left:400px ;

            margin-top-150px;

        }

        #box .submit{

            backgroundorange;

            borderrgb(131129126);

            width120px;

            height30px;

            colorwhite;

            margin-left100px;

        }

        p {

            margin-bottom:30px;

            margin-left:20px;

        }

        #box .kt::before{

            content:'*' ;

            color:red;

        }

        #name {

            margin-top:50px ;

        }

        #box #spn1,#spn3{

            colorcoral;

        }

    </style>

</head>

<body>

    <div id="box">

        <p>

            <span class="kt">&nbsp;&nbsp;&nbsp;&nbsp;名:</span>

            <input type="text" id="name" class="put" placeholder="用户名设置成功后不可更改">

            <span id="spn1">&nbsp&nbsp6-30位字母、数字或’_’,字母开头</span>

        </p>

        <p>

            <span class="kt">登录密码:</span>

            <input type="password" id="keywords" class='put' placeholder="6-20位字母或数字" >

            <span id="pwWarning1" class="strength"></span>

            <span id="pwWarning2" class="strength"></span>

            <span id="pwWarning3" class="strength"></span>

            <span id="pwWarning" class="warning"></span>

        

        </p>

        <p>

            <span class="kt">确认密码:</span>

            <input type="password" id="agein" class="put" placeholder="请确认密码">

            <span id='spn3'>输入框不能为空</span>

        </p>

        <p>

            <button id="submit" class='submit'>注册</button>

        </p>

    </div>

    <script>

        //用户

        var name = document.getElementById('name');

        var spn1 = document.getElementById('spn1');

        //登录密码

        var keywords = document.getElementById('keywords');

        var pwWarningdocument.getElementById('pwWarning');

        var pwWarning1document.getElementById('pwWarning1');

        var pwWarning2document.getElementById('pwWarning2');

        var pwWarning3document.getElementById('pwWarning3');

        //确认密码

        var agein = document.getElementsByTagName('agein');

        var spn3 = document.getElementsByTagName('spn3');

        //注册按钮

        var btn = document.getElementsByTagName('submit');

        // 状态

        var verifyName = false;


        //用户名事件监听绑定

        name.onblur = function() {

            if(/^[a-zA-Z]\w{5,29}$/.test(name.value)){

                //如果校验通过

                spn1.innerText='用户名输入正确';

                spn1.style.color="green";

                verifyName = true;

            } else {

                //校验没有通过

                spn1.innerText = '6-30位字母、数字或“_”,字母开头';

                spn1.style.color='red';

            }

        };


        // 得到密码

        var verifyPw = false;

        // 密码框事件监听绑定

        keywords.onblur = function() {

            if(/^[a-zA-Z0-9]{6,20}$/.test(keywords.value)) {

                verifyPw = true;

                pwWarning.style.display = 'none';

                //判断密码强度 若是低强度

                if(/^\d{6,20}$/.test(keywords.value)||/^[a-z]{6,20}$/.test(keywords.value)||/^[A-Z]{6,20}$/.test(keywords.value)){

                    //低强度

                    pwWarning1.style.backgroundColor = 'red';

                    pwWarning2.style.backgroundColor = 'rgb(209, 207, 207)';

                    pwWarning3.style.backgroundColor = 'rgb(209, 207, 207)';

                } else if(/^[a-zA-Z]{6,20}$/||/^[a-z0-9]{6,20}$/||/^[0-9A-Z]{6,20}$/){

                    //一般强度

                    pwWarning1.style.backgroundColor = 'red';

                    pwWarning2.style.backgroundColor = 'orange';

                    pwWarning3.style.backgroundColor = 'rgb(209, 207, 207)';

                } else {

                    //高强度

                    pwWarning1.style.backgroundColor = 'red';

                    pwWarning2.style.backgroundColor = 'orange';

                    pwWarning3.style.backgroundColor = 'green';

                }

            }else{

                //密码格式不对

                pwWarning.innerText = '请输入6到20位字母或数字';

                pwWarning.style.display = 'inline-block';

                pwWarning.style.color = 'red';

            }

        };


        // 状态

        var verifypw_ = false;

        // 确认密码框事件监听

        agein.onblur = function() {

            if(agein.value == keywords.value){

                spn3.innerText='两次输入一致';

                spn3.style.color = 'green';

            }else if(agein.value == null){

                spn3.innerText='输入框不能为空';

                spn3.style.color='red';

            }else{

                spn3.innerText='两次密码输入不一致,请重新输入';

                son3.style.color='red';

                verifypw_ = true;

            }

        };

        //注册按钮事件

        btn.color = function() {

            //判断所有输入框的状态

            if(verifypw_ && verifyPw && verifyName){

                alert('信息填写正确');

            }else {

                alert('请填写正确的信息');

            }

        };

    </script>

http://img.mukewang.com/climg/603b4de7096d4fcb08570461.jpg

写回答

1回答

好帮手慕慕子

2021-02-28

同学你好,针对同学的问题解答如下:

1、因为name在js中是一个关键字,不可以作为变量名使用,代码中直接使用name作为变量名,不符合语法规范,所以无法实现效果。建议修改:换个变量名,示例:username

http://img.mukewang.com/climg/603b5a5209ca5fcf06400112.jpg

http://img.mukewang.com/climg/603b5a5f0928ed0e07250169.jpg

2、因为js中只给span元素设置背景颜色,而span内容为空,所以无法显示,建议:可以将span设置为行内块,然后设置宽高,就可以让背景颜色显示了

http://img.mukewang.com/climg/603b5b320928865d03530138.jpg

另外,else if中没有对密码框输入的值进行验证,建议添加上,如下图所示:

http://img.mukewang.com/climg/603b5c5a0965bea316220317.jpg

效果如下所示:

http://img.mukewang.com/climg/603b5c6b09ce501305290218.jpg

代码中存在的其他问题解答如下:

1、getElementsByTagName方法是通过标签名获取元素,而agein、spn3对应的是id名,所以确认密码框和提示信息,以及注册按钮,需要使用getElementById方法获取。建议修改:

http://img.mukewang.com/climg/603b5d9709b9ec6f11100836.jpg

2、spn3拼写有误,建议修改:

http://img.mukewang.com/climg/603b5de20981dbe208660409.jpg

3、给注册按钮绑定点击事件,应该是onclick,代码中写成了color。建议修改:

http://img.mukewang.com/climg/603b5e0a09d68e1e06690255.jpg

代码中可以优化的地方,如下:

1、第一次输入正确格式,然后再修改为错误的格式,点击注册按钮,也会提示信息填写正确。如下图所示:

http://img.mukewang.com/climg/603b5e5c0971ae9307900290.jpg

原因:在失焦事件中,通过验证时将对应的布尔值设置为true,但是不通过验证时,没有将对应的布尔值调整为false。

建议:可以在不通过验证的时候将对应的布尔值调整为false,以用户名为例,其他的也是同样的思路,同学自己调整下即可。

http://img.mukewang.com/climg/603b5eb6092b93c108450415.jpg

祝学习愉快~

0

0 学习 · 15276 问题

查看课程