【第38天】JavaScript的页面元素控制、表单验证

1 页面元素控制

       一个语言,封装层数越高,方法越多,这个语言越高级,但运行效率低; 一个语言封装层数越少,方法越少,属性也就越多,这个语言越低级,但运行效率高。
       在书写页面时,必须严格按照以下顺序书写:先将结构(HTML)建立好,形成标准的文档流。再写好样式(CSS),最后定义动作(JS)。

<!DOCTYPE html>
<html lang="zh-CN">
    <head>
        <meta charset="UTF-8">
        <title>页面元素控制</title>
        <style>
            div#container{
                margin:0 auto;
                width:600px;
                height:800px;
                border-radius:25px;
                background-color: gray;
                box-shadow:15px 15px 15px silver;
                text-align: center;
                border:solid 1px gray;
            }

            h2{
                font-family:楷体;
                color:silver;
                margin-top: 50px;
            }

        </style>
    </head>
    <body>
        
        <div id="container">
            <h2>当冬夜渐暖</h2>
            <hr>
            <span id="showImg"></span>
            <br>
            <button onclick="show()">显示专辑封面</button>
            <br>
            <a href="#" onclick="buy()">购买此专辑</a>
        </div>
        <script>
            function show(){
                //根据标签名拿取多个元素
                //此方法返回的是一个数组[0]表示拿取唯一一个                
                let dom_sp = document.getElementsByTagName("span")[0];
                //根据id拿取元素
                //document.getElementById("showImg");
                //修改元素内部结构
                dom_sp.innerHTML = "<img src='image/Cover.jpg' />";
            }

            function buy(){
                //获取所有a标签,取出第一个a标签
                let dom_a = document.getElementsByTagName("a")[0];
                //可选择式对话框
                /*
                * confirm()可选择式对话框
                * 注意点击确定走第一分支
                * 取消第二分支
                * */
                if(confirm("您是否要购买此专辑")){
                    //使用BOM对象将网页定位到另外的页面
                    location.href="suc.html";
                }else{
                    //修改元素内部的属性
                    dom_a.href="err.html";
                }
            }
        </script>
    </body>
</html>

suc.html

<!DOCTYPE html>
<html lang="zh-CN">
    <head>
        <meta charset="UTF-8">
        <title>购买成功</title>
        <style>
            div#msg{
                width:300px;
                height:70px;
                background-color: #ffa2a5;
                border:solid 2px red;
                border-radius:20px;
                padding:10px;
                display:none;
            }
        </style>
        <link rel="stylesheet"
        href="#" id="mylink">
    </head>
    <body>
        购买成功,感谢支持!
        <form action="#" method="get">
            <label for="idcard">输入卡号:</label>
            <input type="password" name="idcard"
            id="idcard"/>
            <br>
            <label for="password">支付密码:</label>
            <input type="password" name="password" id="password" />
            <br>
            <!--
                如果要使用JS来修改元素的CSS样式,则可以通过.style属性
                元素.style.样式名 = 样式值
                鼠标划过多选框checkbox会显示div#msg这个元素
            -->
            记住密码: <input type="checkbox" name="rem" 
            onmouseover="document.getElementById('msg').style.display='block'"
            onmouseout="document.getElementById('msg').style.display='none'"/>
            <div id="msg">如果您在公共场合开启此功能,有可能
            对您的计算机造成严重的安全隐患,请谨慎开启此功能</div>
        </form>

        <!-- 点击按钮后 粉色背景 深蓝字体 -->
        <button onclick="change('flag1')">切换主题1</button>
        <!-- 点击按钮后 浅蓝背景 橙色字体 -->
        <button onclick="change('flag2')">切换主题2</button>

        <script>
            let dom_link = document.getElementById("mylink");

            function change(value){
                if(value=='flag1'){
                    dom_link.href = "css/style1.css";
                }

                if(value=='flag2'){
                    dom_link.href = "css/style2.css";
                }
            }

        </script>
    </body>
</html>

css/style1.css

body{
    background-color: pink;
    color: darkblue;
}

css/style2.css

body{
    background-color: orange;
    color: lightblue;
}

err.html

<!DOCTYPE html>
<html lang="zh-CN">
	<head>
	    <meta charset="UTF-8">
	    <title>购买失败</title>
	</head>
	<body>
	    继续挑选其它专辑
	</body>
</html>

(点击购买时的截图)
在这里插入图片描述

(上面的图点击确定后跳转的页面,鼠标在多选框上时的截图)
在这里插入图片描述

2 表单验证

<!DOCTYPE html>
<html lang="zh-CN">
    <head>
        <meta charset="UTF-8">
        <title>表单验证</title>
    </head>
    <body>
        <!--
            onsubmit:表单提交时
            如果后面存在return 函数
            则函数必须返回true表单才可以提交
        -->
        <form action="getElement6.html" method="get"
              onsubmit="return checkAll()">
            <!--
                1:单行文本输入框
                    用户名在4到8位之间
            -->
            <label for="nameid">用户姓名:</label>
            <input autocomplete="off" id="nameid"
                   name="name" onblur="checkName()"
                   placeholder="用户名必须在4到8位之间" required
                   type="text"/>
            <span id="name_msg"></span>
            <br>
            <!--
                2:单行文本密码框
                    用户密码在4到8位之间
                this:关键字,表示本元素,注意书写在哪个元素中,就表示
                此元素
            -->
            <label for="passid">用户密码:</label>
            <input autocomplete="off" id="passid"
                   name="pass" onblur="checkPass(this.value)" placeholder="用户密码必须在4到8位之间"
                   required
                   type="password"/>
            <span id="pass_msg"></span>
            <br>

            <!--
                 3:多选框
                   爱好不能少于3个
            -->
            爱好: <input name="hobby" onclick="checkHobby()"
                       type="checkbox" value="soccer"/>足球

            <input name="hobby" onclick="checkHobby()"
                   type="checkbox" value="travel"/>旅行

            <input name="hobby" onclick="checkHobby()"
                   type="checkbox" value="read"/>阅读

            <input name="hobby" onclick="checkHobby()"
                   type="checkbox" value="running"/>跑步

            <input name="hobby" onclick="checkHobby()"
                   type="checkbox" value="code"/>敲代码
            <span id="hobby_msg"></span>
            <br>
            <!--
                4:多行文本输入框
                    最多输入140个字符
                    cols:表示一行多少个字符
                    rows:表示可以书写几行
                    onkeyup:键盘键位抬起
                    onkeydown:键盘键位落下
            -->
            <label for="weibo">您有什么新鲜事告诉大家:</label>
            <textarea cols="40" id="weibo"
                      name="weibo" oncopy="return false"
                      oncut="return false"
                      onkeyup="checkText(this.value)"
                      onpaste="return false"
                      rows="5"></textarea>
            <span id="msg"></span>


            <input type="submit" value="提交"/>
            <input type="reset" value="取消"/>
        </form>


        <script>

            let flagName = false;
            let flagPass = false;
            let flagCheck = false;
            let flagText = false;

            function checkName() {
                //拿取input
                let dom_input = document.getElementById("nameid");

                //拿取span
                let dom_sp = document.getElementById("name_msg");

                if (dom_input.value.length < 4 ||
                    dom_input.value.length > 8) {
                    dom_sp.style.color = "red";
                    dom_sp.innerHTML = "<img src='image/wrong.png'>用户名不能小于4位或者大于8位";
                    flagName = false;
                    return;
                }
                dom_sp.style.color = "green";
                dom_sp.innerHTML = "<img src='image/right.png'>用户名符合要求";
                flagName = true;
            }

            function checkPass(flag) {
                let dom_sp = document.getElementById("pass_msg");
                if (flag.length < 4 || flag.length > 8) {
                    dom_sp.style.color = "red";
                    dom_sp.innerHTML = "<img src='image/wrong.png'>用户密码不能小于4位或者大于8位";
                    flagPass = false;
                    return;
                }
                dom_sp.style.color = "green";
                dom_sp.innerHTML = "<img src='image/right.png'>用户密码符合要求";
                flagPass = true;
            }


            function checkHobby() {
                let count = 0;
                //拿取span
                let dom_sp = document.getElementById("hobby_msg");

                //根据name拿取多个元素
                let dom_hobby = document.getElementsByName("hobby");

                for (let value of dom_hobby) {
                    //如果某一个被选中了
                    if (value.checked) {
                        count++;
                    }
                }

                if (count < 3) {
                    dom_sp.innerHTML = "爱好不能少于3个";
                    dom_sp.style.color = "red";
                    flagCheck = false;
                } else {
                    dom_sp.innerHTML = "爱好广泛";
                    dom_sp.style.color = "green";
                    flagCheck = true;
                }
            }

            function checkText(value) {
                let dom_sp = document.getElementById("msg");

                if (value.length <= 140) {
                    dom_sp.style.color = "green";
                    dom_sp.innerHTML = "您还可以输入" + (140 - value.length) + "个字符";
                    flagText = true;
                    return;
                }
                flagText = false;
                dom_sp.style.color = "red";
                dom_sp.innerHTML = "您已经超过" + (value.length - 140) + "个字符";
            }

            function checkAll() {
                return flagName && flagPass && flagCheck && flagText;
            }

        </script>
    </body>
</html>

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值