我写的有两个问题,麻烦老师看一下

我写的有两个问题,麻烦老师看一下

<!DOCTYPE html>

<html lang="en">


<head>

    <meta charset="UTF-8">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>Document</title>

    <style>

        * {

            padding: 0;

            margin: 0;

        }


        .wrap {

            width: 1000px;

            height: 500px;

            background-color: #ccc;

            margin: 0 auto;

        }


        .heading {

            background-color: rgb(40, 90, 184);

            text-indent: 20px;

            height: 30px;

            line-height: 30px;

            font-weight: normal;

            color: #eee;

            margin-bottom: 40px;

        }


        p {

            text-align: center;

            margin: 10px;

            font-size: 15px;

        }


        #sex {

            width: 170px;

            height: 20px;

        }


        #btn {

            width: 70px;

            height: 30px;

            background-color: #0e77a8;

            color: #eee;

            border: 1px solid #0e77a8;

            border-radius: 5px;

            margin: 0 auto;

            display: block;

        }


        span {

            font-size: 10px;

            color: rgb(214, 13, 13);

        }

    </style>

</head>


<body>

    <div class="wrap">

        <h5 class="heading">用户注册</h5>

        <div class="wp">

            <p>

                用户名:<input type="text" id="userName"><span class="userName"></span>

            </p>

            <p>

                登录密码:<input type="password" id="pwda"><span class="pwda"></span>

            </p>

            <p>

                登录密码:<input type="password" id="pwdb"><span class="pwdb"></span>

            </p>

            <p>

                姓名:<input type="text" id="name"><span class="name"></span>

            </p>

            <p>

                性别:

                <select name="sex" id="sex">

                    <option value="男" checked>男</option>

                    <option value="女">女</option>

                </select><span class="sex"></span>

            </p>

            <p>

                身份证号码:<input type="text" id="number"><span class="number"></span>

            </p>

            <p>

                邮箱:<input type="text" id="mail"><span class="mail"></span>

            </p>

            <p>

                手机号码:<input type="text" id="tel"><span class="tel"></span>

            </p>

            <br>

            <input type="submit" id="btn" value="提交">

        </div>

    </div>


    <script>

        // 获取标签元素

        var elem = {

            userName1: document.getElementById('userName'),

            userName2: document.getElementsByClassName('userName')[0],

            pwda1: document.getElementById('pwda'),

            pwda2: document.getElementsByClassName('pwda')[0],

            pwdb1: document.getElementById('pwdb'),

            pwdb2: document.getElementsByClassName('pwdb')[0],

            name1: document.getElementById('name'),

            name2: document.getElementsByClassName('name')[0],

            sex1: document.getElementById('sex'),

            sex2: document.getElementsByClassName('sex')[0],

            number1: document.getElementById('number'),

            number2: document.getElementsByClassName('number')[0],

            mail1: document.getElementById('mail'),

            mail2: document.getElementsByClassName('mail')[0],

            tel1: document.getElementById('tel'),

            tel2: document.getElementsByClassName('tel')[0],

            btn: document.getElementById('btn'),

        };

        // 设置匹配内容

        var pattern = {

            userName: /^[a-z]\w{5,19}$/i,

            pwda: /^[\S^\u4e00-\u9fa5]{6,18}$/,

            name: /^[\u4e00-\u9fa5]{2,4}$/,

            number: /^(?:(?:\d{15})|(?:\d{17}[\d|x]))$/,

            mail: /^(?:\w+\.)*\w+@(?:\w+\.)+[a-z]{2,4}$/i,

            tel: /^(?:13\d|147|15(?:[1-3]|[5-9])|18(?:2|[5-9]))\d{8}$/,

        };

        // 设置各项内容的标志,判断是否符合要求

        var a = {

            a1: false,

            a2: false,

            a3: false,

            a4: false,

            a5: false,

            a6: false,

            a7: false,

        };

        // 封装判断函数

        function judge(elem1, pattern, elem2, prompt, a) {

            if (pattern.test(elem1.value)) {

                elem2.innerHTML = 'OK';

                a = true;

            } else {

                elem2.innerHTML = prompt;

                a = false;

            }

        }

        // 各内容进行判断

        elem.userName1.onblur = function () {

            judge(this, pattern.userName, elem.userName2, '6-20位字母、数字或“_”,字母开头', a.a1);

        }

        elem.pwda1.onblur = function () {

            judge(this, pattern.pwda, elem.pwda2, '6-18位,包括数字字母或符号,中间不能有空格', a.a2);

        }

        elem.pwdb1.onblur = function () {

            if (elem.pwdb1.value == elem.pwda1.value && elem.pwda2.innerHTML == 'OK') {

                elem.pwdb2.innerHTML = 'OK';

                a.a3 = true;

            } else {

                elem.pwdb2.innerHTML = '请设置密码';

                a.a3 = false;

            }

        }

        elem.name1.onblur = function () {

            judge(this, pattern.name, elem.name2, '真实姓名为两位到四位的中文', a.a4);

        }

        elem.number1.onblur = function () {

            judge(this, pattern.number, elem.number2, '请输入18位的身份证号码', a.a5);

        }

        elem.mail1.onblur = function () {

            judge(this, pattern.mail, elem.mail2, '邮箱格式不正确', a.a6);

        }

        elem.tel1.onblur = function () {

            judge(this, pattern.tel, elem.tel2, '电话号码不正确', a.a7);

        }

        // 给提交按钮绑定事件

        elem.btn.onclick = function () {

            for (var i in a) {

                if (!a[i]) {

                    

                }

            }

            alert('验证成功');//这里我想的是对每一项内容的标志判断是否为true,如果都为true就弹出“验证成功”,不为true那一项就提示相应信息并且不弹窗

        }

    </script>

</body>


</html>

1、怎么让这些内容像任务提示的那样每个输入框都对齐呢?我的输入框后面的提示出现以后他们就更乱了

2、应该怎么给提交按钮绑定事件?怎么判断每一项是否符合标准?我写的好像太麻烦了,判断后不知道怎么显示相应的提示信息,要再进行一个一个onblur事件?

正在回答

登陆购买课程后可参与讨论,去登陆

2回答

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

1、左侧的内容文本右对齐右侧的文本左对齐,是这样实现的。父容器中p标签中已经设置居中显示属性了,文本在水平方向上是居中的。显示效果中间的间隙想要保持一致,代码中文字和后面的文本框中间隙一致就好。

2、声明的flag变量接收的是judge方法中返回的布尔值,这个变量设置不设置都是可以的,if条件中直接调用judge方法。

3、for循环遍历也可以,但是会判断对象中每一个值,执行弹出正确或者错误语句,一般情况下只要最后一个总的提示就好。还是直接使用if判断,逻辑与会简单一些

4、如果想要循环的方式调用onblur事件,出现提示。建议将elem对象分为两个对象,分为只有表单元素,只有后面提示元素。然后遍历elem,调用onblur。例如:

http://img1.sycdn.imooc.com//climg/5e745dc0098b17f604270155.jpg

自己可以试着写一写,祝学习愉快!

  • Aurora_Meteor 提问者 #1
    那您第二点说的那个,每个内容判断是否符合要求并且将相应的标志值改变是可以用一个函数封装起来的吧?毕竟它们不是都传入相应的内容以及要求的正则还有标志值嘛
    2020-03-20 14:59:06
  • 好帮手慕星星 回复 提问者 Aurora_Meteor #2
    如果每个验证的规律都是一样的,是可以进行封装的,自己可以动手试一下。
    2020-03-20 20:17:22
好帮手慕言 2020-03-19 17:12:09

同学你好,关于同学的疑问,解答如下:

1、左侧的提示文字可以使用标签嵌套一下(使用其他的标签也是可以的,这里使用的是label标签,在后面的课程中会学到,这里了解即可),调整样式。例如:
http://img1.sycdn.imooc.com//climg/5e73295a09d50a0004560594.jpg

http://img1.sycdn.imooc.com//climg/5e7329760977836005870467.jpg

http://img1.sycdn.imooc.com//climg/5e7329f50911626004300605.jpg

效果:

http://img1.sycdn.imooc.com//climg/5e732a0009afa73901720279.jpg

2、验证正确或者验证失败,改变对象a中的值,不要以传递参数的形式修改,是修改不成功的。建议:可以定义标识符,如下:
http://img1.sycdn.imooc.com//climg/5e7336770911971407140386.jpg

http://img1.sycdn.imooc.com//climg/5e7336f409e003ab13050273.jpg

http://img1.sycdn.imooc.com//climg/5e73371209cfd0ab09040238.jpg

修改后的代码:

<script>
        // 获取标签元素
        var elem = {
            userName1: document.getElementById('userName'),
            userName2: document.getElementsByClassName('userName')[0],
            pwda1: document.getElementById('pwda'),
            pwda2: document.getElementsByClassName('pwda')[0],
            pwdb1: document.getElementById('pwdb'),
            pwdb2: document.getElementsByClassName('pwdb')[0],
            name1: document.getElementById('name'),
            name2: document.getElementsByClassName('name')[0],
            sex1: document.getElementById('sex'),
            sex2: document.getElementsByClassName('sex')[0],
            number1: document.getElementById('number'),
            number2: document.getElementsByClassName('number')[0],
            mail1: document.getElementById('mail'),
            mail2: document.getElementsByClassName('mail')[0],
            tel1: document.getElementById('tel'),
            tel2: document.getElementsByClassName('tel')[0],
            btn: document.getElementById('btn'),
        };
        // 设置匹配内容
        var pattern = {
            userName: /^[a-z]\w{5,19}$/i,
            pwda: /^[\S^\u4e00-\u9fa5]{6,18}$/,
            name: /^[\u4e00-\u9fa5]{2,4}$/,
            number: /^(?:(?:\d{15})|(?:\d{17}[\d|x]))$/,
            mail: /^(?:\w+\.)*\w+@(?:\w+\.)+[a-z]{2,4}$/i,
            tel: /^(?:13\d|147|15(?:[1-3]|[5-9])|18(?:2|[5-9]))\d{8}$/,
        };
        // 设置各项内容的标志,判断是否符合要求
        var a = {
            a1: false,
            a2: false,
            a3: false,
            a4: false,
            a5: false,
            a6: false,
            a7: false,
        };
        // 封装判断函数
        function judge(elem1, pattern, elem2, prompt) {
            var sign = false;
            if (pattern.test(elem1.value)) {
                elem2.innerHTML = 'OK';
                sign = true;
            } else {
                elem2.innerHTML = prompt;
                sign = false;
            }
            return sign
        }
        // 各内容进行判断
        elem.userName1.onblur = function () {
            var flag = judge(this, pattern.userName, elem.userName2, '6-20位字母、数字或“_”,字母开头');
            if (flag) {
                a.a1 = true
            } else {
                a.a1 = false
            }
        }
        elem.pwda1.onblur = function () {
            var flag = judge(this, pattern.pwda, elem.pwda2, '6-18位,包括数字字母或符号,中间不能有空格');
            if (flag) {
                a.a2 = true
            } else {
                a.a2 = false
            }
        }
        elem.pwdb1.onblur = function () {
            if (elem.pwdb1.value == elem.pwda1.value && elem.pwda2.innerHTML == 'OK') {
                elem.pwdb2.innerHTML = 'OK';
                a.a3 = true;
            } else {
                elem.pwdb2.innerHTML = '请设置密码';
                a.a3 = false;
            }
        }
        elem.name1.onblur = function () {
            var flag = judge(this, pattern.name, elem.name2, '真实姓名为两位到四位的中文');
            if (flag) {
                a.a4 = true
            } else {
                a.a4 = false
            }
        }
        elem.number1.onblur = function () {
            var flag = judge(this, pattern.number, elem.number2, '请输入18位的身份证号码');
            if (flag) {
                a.a5 = true
            } else {
                a.a5 = false
            }
        }
        elem.mail1.onblur = function () {
            var flag = judge(this, pattern.mail, elem.mail2, '邮箱格式不正确');
            if (flag) {
                a.a6 = true
            } else {
                a.a6 = false
            }
        }
        elem.tel1.onblur = function () {
            var flag = judge(this, pattern.tel, elem.tel2, '电话号码不正确');
            if (flag) {
                a.a7 = true
            } else {
                a.a7 = false
            }
        }
        // 给提交按钮绑定事件
        elem.btn.onclick = function () {
            if (a.a1 && a.a2 && a.a3 && a.a4 && a.a5 && a.a6 && a.a7) {
                alert("验证成功")
            } else {
                alert("验证失败")
            }
        }
    </script>

如果我的回答帮到了你,欢迎采纳,祝学习愉快~

  • 提问者 Aurora_Meteor #1
    您的第一点中,只要让左侧的内容文本右对齐右侧的文本左对齐就可以实现两侧的内容压着中间那一列内容就可以实现这些内容垂直方向对齐了是吗?是不是还得有这些内容的整体水平居中而且中间那一列的宽度差不多才行? 您第二点中,使用flag来判断内容是否符合规定,这部分是不是也可以用一个函数封装起来?传入的参数就是相应的flag和a对象中相应的标志?
    2020-03-19 21:13:52
  • 提问者 Aurora_Meteor #2
    老师,另外,在最后按钮点击时判断各项标志是否为true只能把它们全部传入if中吗?不能使用遍历的方式来判断是吗? 还有,题目的要求不是说有不符合要求的内容时,在相应内容的文本框后面显示提示信息吗?您改了的这个只是弹出‘验证失败’,并没有那些提示啊。要做到那个是不是很复杂?我只能想到调用每项内容的onblur事件,只记得用的是遍历的方式但是不记得当时代码是怎么写的了,而且当时的代码效果发现只有第一项的onblur事件被调用成功
    2020-03-19 21:29:00
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
2.组件化网页开发
  • 参与学习           人
  • 提交作业       1121    份
  • 解答问题       14456    个

本阶段在运用JS实现动态网页开发的基础上,带你深入理解企业开发核心思想,完成一个企业级网页的开发,体验前端工程师的成就感。

了解课程
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师