JavaEE Day10 JavaScript高级
阅读原文时间:2023年07月09日阅读:4

今日内容

  • JavaScript

  • ECMAScript:客户端脚本语言标准()

  • BOM对象

  • DOM对象

  • 事件

  • 学习顺序:DOM-事件-BOM-DOM

一、简单入门

1、DOM

  • 功能:控制HTML文档的内容(CRUD)

  • 代码:获取页面标签(元素)对象Element

  • document.getElementById("id值"):通过元素的id获取元素对象

  • 功能:操作对象

  • 设置其属性值

  • 明确获取的对象是哪一个

  • 查看API文档,找其中有哪些属性可以设置 a.src=

  • 修改内容(标签体内容)

  • 内容:innerHTML





    DOM获取元素对象


    off

    悔创阿里杰克马


2、事件

  • 功能:某些组件被执行了某些操作后,触发了某些代码的执行

  • 造句:xxx被xxx,我就xxx

  • 如:我方水晶被摧毁后,我就骂队友

  • 敌方水晶被摧毁后,我就夸奖自己

  • 如何绑定事件

  • 直接在html标签上指定事件的属性,属性值就是js代码

  • 事件:onClick---单击事件

  • 缺点:耦合度比较高

  • 通过js获取元素对象,指定事件属性,设置一个函数





    事件绑定


    off off

3、案例1--电灯开关

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>案例1:电灯开关</title>
</head>
<body>
    <img src="img/off.gif" alt="off" id="light">
    <script>
        /*
            分析:
                1、获取图片事件
                2、绑定单击事件
                3、每次点击切换图片
                    规则:
                          如果灯是开的--on,切换图片为off
                          如果灯是关的--off,切换图片为on
                    使用flag标记来完成
        */
        //1.获取图片对象
        var light = document.getElementById("light");
        var flag = false;//代表灯是灭的,off图片
        //2、绑定单击事件
        light.onclick = function() {
            //判断
            if (flag){
                light.src = "img/off.gif";
                flag = false;
            }else{
                //如果灯是灭的,则打开
                light.src = "img/on.gif";
                flag = true;
            }
        }
    </script>
</body>
</html>

有错误:F12--console控制台会报错,点击可以定位到错误的位置

二、BOM

1、概念

Browser Object Model:浏览器对象模型

将浏览器的各个组成部分封装为对象,查看浏览器的对象

2、组成

  • Window:窗口对象
  • Navigator:浏览器对象
  • Screen:显示器屏幕对象
  • History:历史记录对象
  • Location:地址栏对象

2.1Window:窗口对象---弹出方法

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Window窗口对象</title>
    <script>
        /*
            whidow窗口对象
                1、创建
                2、方法
                    1.与弹出框有关的方法
                        alert()    显示带有一段消息和一个确认按钮的警告框。
                        confirm()    显示带有一段消息以及确认按钮和取消按钮的对话框。
                            如果用户点击确定按钮,则方法返回true
                            如果用户点击取消按钮,则方法返回false
                        prompt()    显示可提示用户输入的对话框。
                            返回值:用户输入的值
                3、属性
                4、特点
                    1.Window对象不需要创建,可以直接使用window使用,如window.方法名()
                    2.window引用可以省略,即:方法名()
        * */
        //alert("hello1");
        //window.alert("hello window");
        /*var flag = confirm("您确定要退出吗?");
        alert(flag);
        if (flag){
            //退出操作
            alert("欢迎再次光临");
        }else{
            //提示:手别抖
            alert("提示:手别抖");
        }*/
        //输入框
        var result = prompt("请输入用户名:");
        alert(result);
    </script>
</head>
<body>
</body>
</html>

2.2Window:窗口对象---与打开关闭有关的方法

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Window窗口对象</title>
</head>
<body>
<input type="button" id="open_btn" value="打开窗口">
<input type="button" id="close_btn" value="关闭已经打开的那个窗口">
<script>
    /*
        whidow窗口对象
            1、创建
            2、方法
                2.与打开关闭有关的方法
                   open()    打开一个新的浏览器窗口或查找一个已命名的窗口。
                        返回新的window对象
                   close()    关闭浏览器窗口。
                        谁调用我我关谁
            3、属性
            4、特点
                1.Window对象不需要创建,可以直接使用window使用,如window.方法名()
                2.window引用可以省略,即:方法名()
    * */
    //打开一个新窗口
    var openBtn = document.getElementById("open_btn");
    var newWindow;
    openBtn.onclick = function () {
        newWindow = open("http://www.baidu.com");
    }
    //关闭
    var closeBtn = document.getElementById("close_btn");
    closeBtn.onclick = function () {
        //关闭新窗口
        newWindow.close();//代表当前的窗口
    }
</script>
</body>
</html>

2.3Window:窗口对象---与定时器有关的方法

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Window窗口对象</title>
</head>
<body>
<script>
    /*
        whidow窗口对象
            1、创建
            2、方法
                3.与定时器有关的方法
                    setTimeout()    在指定的毫秒数后调用函数或计算表达式,只执行一次
                        参数:
                            1.js代码片段
                            2.毫秒值
                        返回值:唯一标识,用于取消定时器
                    clearTimeout()    取消由 setTimeout() 方法设置的 timeout,取消定时器 

                    setInterval()    按照指定的周期(以毫秒计)来调用函数或计算表达式,循环执行【执行多次,天天早上响】
                        参数:
                            1.js代码片段
                            2.毫秒值
                        返回值:唯一标识,用于取消定时器
                    clearInterval()    取消由 setInterval() 设置的 timeout【取消循环定时器】
            3、属性
            4、特点
                1.Window对象不需要创建,可以直接使用window使用,如window.方法名()
                2.window引用可以省略,即:方法名()
    * */
    //一次性定时器
    function fun() {
        alert("boom!!");
    }
    var id = setTimeout("alert(\"boom!!\");",3000);//代码片段
    //setTimeout("fun();",3000);//代码片段
    //setTimeout(fun,3000);
    //第一个参数作为方法
    //取消定时器
    //clearTimeout(id);
    //设置循环定时器
    var id = setInterval(fun,2000);
    clearInterval(id);
</script>
</body>
</html>

2.4 案例:轮播图

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>案例2:轮播图</title>
    <script>
        /*
            分析:
                1.在页面上使用img标签展示图片
                2.定义一个方法,修改图片对象的链接src属性
                3.定义一个定时器,每隔3秒调用这个方法一次
        * */
        /**
         * 修改图片src属性
         */
        var number = 1;
        function fun(){
            number++;
            //判断number是否大于3
            if(number>3){
                number=1;
            }
            //3秒可以获取到,但是如果时间很短,就要放到img后面
            //为了万无一失,还是放到img后面比较好
            var img = document.getElementById("img");

            img.src = "img/banner_"+ number +".jpg";
        }
        //2.定义定时器
        setInterval(fun,3000);
    </script>
</head>
<body>
    <img src="img/banner_1.jpg" alt="" width="100%" id="img">
</body>
</html>

2.5Window:窗口对象---属性

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Window窗口对象</title>
</head>
<body>
<input type="button" id="openBtn" value="打开">
<script>
    /*
        whidow窗口对象
            1、创建
            2、方法
            3、属性
                1.获取其他BOM对象
                    history
                    location
                    Navigator
                    Screen
                2.获取DOM对象
                    document
            4、特点
                1.Window对象不需要创建,可以直接使用window使用,如window.方法名()
                2.window引用可以省略,即:方法名()
    * */
    //获取history
    var h1 = window.history;
    var h2 = history;
    alert(h1);
    alert(h2);
    var openBtn = window.document.getElementById("openBtn");
    alert(openBtn);
</script>
</body>
</html>

3.DOM_Location对象

3.1 Location 对象是 Window 对象的一个部分,可通过 window.location 属性来访问。

  • 创建

  • window.location

  • location

  • 方法

  • reload():重新加载当前文档/刷新

  • 属性

  • href:设置或返回完整的URL





    Location对象





3.2 案例:自动跳转首页

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>案例:自动跳转</title>
    <style>
        p{
            text-align: center;
        }
        span{
            color:red;
        }
    </style>

</head>
<body>
    <p>
        <span id = "time">5</span>秒之后,自动跳转到首页
    </p>
    <script>
        /*
            分析:
                1.显示页面效果  <p>
                2.倒计时读秒效果(定时器)实现
                      2.1定义一个方法,获取span标签,修改span标签体内容,时间--
                      2.2定义一个定时器,一秒执行一次该方法
                3.在方法中判断,时间如果<=0,则跳转到首页
        * */
        //倒计时读秒效果(定时器)实现
        var second = 5;
        var time;
        function showTime(){
            second--;
            //时间如果<=0,则跳转到首页
            if (second<=0){
                location.href = "http://www.baidu.com";//实现跳转
            }
            time = documen.getElementById("time");
            time.innerHTML = second+"";
        }
        //设置 定时器,一秒执行一次该方法
        setInterval(showTime,1000);
    </script>
</body>
</html>

4.BOM_History历史记录对象

History 对象包含用户(在当前浏览器窗口中)访问过的 URL。

  • 创建(获取)

  • windows.history

  • history

  • 方法

  • back() 加载 history 列表中的前一个 URL。

  • forward() 加载 history 列表中的下一个 URL。

  • go() 加载 history 列表中的某个具体页面。

  • 属性

  • length 返回当前窗口历史列表中的 URL 数量。



    History对象



    09页面





三、DOM

document.getElementById("id值"):通过元素的id获取元素对象

1、概述

Document Object Model:文档对象模型

1.1 将标记语言 文档的各个组成部分封装为对象,可以使用这些对象对标记语言文档进行CRUD的动态操作

HTML DOM 定义了访问和操作 HTML 文档的标准方法。

DOM 将 HTML 文档表达为树结构。

DOM 是 W3C(万维网联盟)的标准。

DOM 定义了访问 HTML 和 XML 文档的标准:“W3C 文档对象模型 (DOM) 是中立于平台和语言的接口,它允许程序和脚本动态地访问和更新文档的内容、结构和样式。”

1.2W3C DOM 标准

被分为 3 个不同的部分:

核心 DOM - 针对任何结构化文档的标准模型

  • Document对象:文档对象☆
  • Element:元素对象☆
  • Attribute:属性对象
  • Text:文本对象
  • Comment:注释对象
  • Node:节点对象,是其他5个的父对象☆

XML DOM - 针对 XML 文档的标准模型

HTML DOM - 针对 HTML 文档的标准模型☆【对核心的扩展和封装】

1.3 学习内容

  • 核心 DOM - 针对任何结构化文档的标准模型

    • Document对象:文档对象☆
    • Element:元素对象☆
    • Node:节点对象,是其他5个的父对象☆
  • HTML DOM

2.DOM--Document

XML DOM较核心DOM修改较少,所以看xml DOM的文档

window里面包含了document对象

  • 创建/获取:在html dom模型中,可以使用window对象来获取

  • window.document

  • document

  • 方法

  • 获取Element对象

  • getElementById():根据id属性值获取元素对象,id属性值一般唯一

  • getElementsByTagName():根据元素名称获取元素对象们, 返回的是一个数组

  • getElementsByClassName:根据class属性值获取元素对象们,返回值是一个数组

  • getElementsByName():根据name属性值获取元素对象们,返回值是一个数组

  • 创建其他DOM对象

  • 属性

2.1 Document对象_获取Element方法

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document对象</title>
</head>
<body>
<div id="div1">div1</div>
<div id="div2">div2</div>
<div id="div3">div3</div>
<div class="cls1">div4</div>
<div class="cls1">div5</div>
<input type="text" name="username">
<script>
    /*
        DOM-Document对象_获取Element方法
        XML DOM较核心DOM修改较少,所以看xml DOM的文档
        window里面包含了document对象
        创建/获取:在html dom模型中,可以使用window对象来获取
            window.document
            document
        方法
            获取Element对象
                getElementById():根据id属性值获取元素对象,id属性值一般唯一
                getElementsByTagName():根据元素名称获取元素对象们, 返回的是一个数组
                getElementsByClassName:根据class属性值获取元素对象们,返回值是一个数组
                getElementsByName():根据name属性值获取元素对象们,返回值是一个数组
            创建其他DOM对象
        属性
    * */
    //2.根据元素名称获取
    var divs = document.getElementsByTagName("div");
    alert(divs.length);
    //3.根据class属性值获取
    var div_cls = document.getElementsByClassName("cls1");
    alert(div_cls.length);
    var ele_username = document.getElementsByName("username");//input表单比较多,radio比较多
    alert(ele_username.length);
</script>
</body>
</html>

2.2 Document对象_创建DOM对象

   createAttribute(name):属性

   createComment():注释

   createElement():元素

   createTextNode():文本

3.Element对象

  • 获取(创建):通过document来获取和创建

  • 方法

  • removeAttribute():删除属性

  • setAttribute():设置属性

  • 属性



    Element对象

    点我试一试


4.Node节点对象,其他5个对象的父对象

节点可以是元素节点、属性节点、文本节点,或者也可以是“节点类型”那一节中所介绍的任何一种节点。

  • 特点 :所有DOM对象

  • 方法:

  • CRUD DOM树

  • appendChild() 向节点的子节点列表的结尾添加新的子节点。

  • removeChild() 删除(并返回)当前节点的指定子节点。

  • replaceChild() 用新节点替换一个子节点。

  • 属性

  • parentNode:返回当前节点的父节点


    Node对象

    div2
    div1
    删除div的子节点 添加子节点

5.案例4_动态表格

5.1添加

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        table{
            border: 1px solid;
            margin: auto;
            width: 500px;
        }

        td,th{
            text-align: center;
            border: 1px solid;
        }
        div{
            text-align: center;
            margin: 50px;
        }
    </style>
</head>
<body>
<div>
    <input type="text" id="id" placeholder="请输入编号">
    <input type="text" id="name"  placeholder="请输入姓名">
    <input type="text" id="gender"  placeholder="请输入性别">
    <input type="button" value="添加" id="btn_add">

</div>
<table id="table">
    <caption>学生信息表</caption>
    <tr>
        <th>编号</th>
        <th>姓名</th>
        <th>性别</th>
        <th>操作</th>
    </tr>

    <tr>
        <td>1</td>
        <td>令狐冲</td>
        <td>男</td>
        <td><a href="javascript:void(0);" onclick="delTr(this);">删除</a></td>
    </tr>

    <tr>
        <td>2</td>
        <td>任我行</td>
        <td>男</td>
        <td><a href="javascript:void(0);"  onclick="delTr(this);">删除</a></td>
    </tr>

    <tr>
        <td>3</td>
        <td>岳不群</td>
        <td>?</td>
        <td><a href="javascript:void(0);"  onclick="delTr(this);">删除</a></td>
    </tr>

</table>

<script>
    /*
        分析:
            1.添加
                1.给添加按钮绑定单击事件
                2.获取文本框的内容
                3.创建td,设置td的文本为文本框的内容
                4.创建tr
                5.将td添加到tr中
                6.获取tr,将tr添加到table中

    * */
    //1.获取按钮
    document.getElementById("btn_add").onclick = function () {
        //2.获取文本框的内容
        var id = document.getElementById("id").value;
        var name = document.getElementById("name").value;
        var gender = document.getElementById("gender").value;
        //3.创建td,设置td的文本为文本框的内容
        //赋值td的标签体
        //id的td
        var td_id = document.createElement("td");
        var text_id = document.createTextNode(id);//文本节点
        td_id.appendChild(text_id);
        var td_name = document.createElement("td");
        var text_name = document.createTextNode(name);//文本节点
        td_name.appendChild(text_name);
        var td_gender = document.createElement("td");
        var text_gender = document.createTextNode(gender);//文本节点
        td_gender.appendChild(text_gender);
        //a标签的td
        var td_a=document.createElement("td");
        var ele_a = document.createElement("a");
        //4.创建tr
        var tr = document.createElement("tr");
        //5.将td添加到tr中
        tr.appendChild(td_id);
        tr.appendChild(td_name);
        tr.appendChild(td_gender);
        //6.获取tr,将tr添加到table中
        var table = document.getElementsByTagName("table")[0];
        table.appendChild(tr);
        //javascript:void(0);
        ele_a.setAttribute("href","javascript:void(0);");
        var text_a = document.createTextNode("删除");
        ele_a.appendChild(text_a);
        td_a.appendChild(ele_a);
        tr.appendChild(td_a);
    }

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

5.2删除

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        table{
            border: 1px solid;
            margin: auto;
            width: 500px;
        }

        td,th{
            text-align: center;
            border: 1px solid;
        }
        div{
            text-align: center;
            margin: 50px;
        }
    </style>
</head>
<body>
<div>
    <input type="text" id="id" placeholder="请输入编号">
    <input type="text" id="name"  placeholder="请输入姓名">
    <input type="text" id="gender"  placeholder="请输入性别">
    <input type="button" value="添加" id="btn_add">

</div>
<table id="table">
    <caption>学生信息表</caption>
    <tr>
        <th>编号</th>
        <th>姓名</th>
        <th>性别</th>
        <th>操作</th>
    </tr>

    <tr>
        <td>1</td>
        <td>令狐冲</td>
        <td>男</td>
        <td><a href="javascript:void(0);" onclick="delTr(this);">删除</a></td>
    </tr>

    <tr>
        <td>2</td>
        <td>任我行</td>
        <td>男</td>
        <td><a href="javascript:void(0);"  onclick="delTr(this);">删除</a></td>
    </tr>

    <tr>
        <td>3</td>
        <td>岳不群</td>
        <td>?</td>
        <td><a href="javascript:void(0);"  onclick="delTr(this);">删除</a></td>
    </tr>

</table>

<script>
    /*
        分析:
            1.添加
                1.给添加按钮绑定单击事件
                2.获取文本框的内容
                3.创建td,设置td的文本为文本框的内容
                4.创建tr
                5.将td添加到tr中
                6.获取tr,将tr添加到table中
            2.删除
                1.确定点击的是哪一个超链接,用id确定麻烦,可以加属性
                    <a href="javascript:void(0);"  onclick="delTr(this);">删除</a>
                2.怎么去删除?
                    removeChild():通过父节点删除子节点

    * */
    //1.获取按钮
    document.getElementById("btn_add").onclick = function () {
        //2.获取文本框的内容
        var id = document.getElementById("id").value;
        var name = document.getElementById("name").value;
        var gender = document.getElementById("gender").value;
        //3.创建td,设置td的文本为文本框的内容
        //赋值td的标签体
        //id的td
        var td_id = document.createElement("td");
        var text_id = document.createTextNode(id);//文本节点
        td_id.appendChild(text_id);
        var td_name = document.createElement("td");
        var text_name = document.createTextNode(name);//文本节点
        td_name.appendChild(text_name);
        var td_gender = document.createElement("td");
        var text_gender = document.createTextNode(gender);//文本节点
        td_gender.appendChild(text_gender);
        //a标签的td
        var td_a=document.createElement("td");
        var ele_a = document.createElement("a");
        //4.创建tr
        var tr = document.createElement("tr");
        //5.将td添加到tr中
        tr.appendChild(td_id);
        tr.appendChild(td_name);
        tr.appendChild(td_gender);
        //6.获取tr,将tr添加到table中
        var table = document.getElementsByTagName("table")[0];
        table.appendChild(tr);
        //javascript:void(0);
        ele_a.setAttribute("href","javascript:void(0);");
        ele_a.setAttribute("onclick","delTr(this);");
        var text_a = document.createTextNode("删除");
        ele_a.appendChild(text_a);
        td_a.appendChild(ele_a);
        tr.appendChild(td_a);

    }
    //删除方法
    function delTr(obj) {
        //alert(obj);//代表当前超链接的对象
        var table = obj.parentNode.parentNode.parentNode;
        var tr = obj.parentNode.parentNode;
        table.removeChild(tr);
    }
</script>
</body>
</html>

6.HTML DOM

  • HTML DOM 是关于如何获取、修改、添加或删除 HTML 元素的标准。

  • document和Element对象已经介绍完毕

  • 需要学习:

  • 标签体的设置和获取:innerHTML

  • 使用html元素对象的属性

  • 控制样式的设置

6.1 使用innerHTML设置和获取标签体

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>HTMLDOM</title>
</head>
<body>
    <div id="div1">
        div
    </div>
    <script>
        var div1 = document.getElementById("div1");
        var innerHTML = div1.innerHTML;
        //alert(innerHTML);//标签体的内容
        //标签中替换一个文本输入框
        //div1.innerHTML = "<input type='text'>";
        //双引号可以嵌套单引号,单引号可以嵌套双引号,但是不能单引号嵌套单引号,双引号嵌套双引号
        //不能双双单单
        //给div标签中追加一个文本输入框
        div1.innerHTML += "<input type='text'>";
    </script>
</body>
</html>

案例4修改,不再是面向对象,但是变得简单了

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        table{
            border: 1px solid;
            margin: auto;
            width: 500px;
        }

        td,th{
            text-align: center;
            border: 1px solid;
        }
        div{
            text-align: center;
            margin: 50px;
        }
    </style>
</head>
<body>
<div>
    <input type="text" id="id" placeholder="请输入编号">
    <input type="text" id="name"  placeholder="请输入姓名">
    <input type="text" id="gender"  placeholder="请输入性别">
    <input type="button" value="添加" id="btn_add">

</div>
<table id="table">
    <caption>学生信息表</caption>
    <tr>
        <th>编号</th>
        <th>姓名</th>
        <th>性别</th>
        <th>操作</th>
    </tr>

    <tr>
        <td>1</td>
        <td>令狐冲</td>
        <td>男</td>
        <td><a href="javascript:void(0);" onclick="delTr(this);">删除</a></td>
    </tr>

    <tr>
        <td>2</td>
        <td>任我行</td>
        <td>男</td>
        <td><a href="javascript:void(0);"  onclick="delTr(this);">删除</a></td>
    </tr>

    <tr>
        <td>3</td>
        <td>岳不群</td>
        <td>?</td>
        <td><a href="javascript:void(0);"  onclick="delTr(this);">删除</a></td>
    </tr>

</table>

<script>
    /*
        分析:
            1.添加
                1.给添加按钮绑定单击事件
                2.获取文本框的内容
                3.创建td,设置td的文本为文本框的内容
                4.创建tr
                5.将td添加到tr中
                6.获取tr,将tr添加到table中
            2.删除
                1.确定点击的是哪一个超链接,用id确定麻烦,可以加属性
                    <a href="javascript:void(0);"  onclick="delTr(this);">删除</a>
                2.怎么去删除?
                    removeChild():通过父节点删除子节点

    * */
    //1.获取按钮
    //使用innerHTML添加,不面向对象,但是很简单
    document.getElementById("btn_add").onclick = function () {
        //2.获取文本框的内容
        var id = document.getElementById("id").value;
        var name = document.getElementById("name").value;
        var gender = document.getElementById("gender").value;
        //获取table
        document.getElementsByTagName("table")[0];//为什么加0?
        //追加一行
        table.innerHTML +="<tr>\n" +
            "        <td>"+id+"</td>\n" +
            "        <td>"+name+"</td>\n" +
            "        <td>"+gender+"</td>\n" +
            "        <td><a href=\"javascript:void(0);\"  onclick=\"delTr(this);\">删除</a></td>\n" +
            "    </tr>";
    }
    //删除方法
    function delTr(obj) {
        //alert(obj);//代表当前超链接的对象
        var table = obj.parentNode.parentNode.parentNode;
        var tr = obj.parentNode.parentNode;
        table.removeChild(tr);
    }
</script>
</body>
</html>

6.2 通过HTML DOM控制元素的样式

  • 使用元素style属性设置

  • 提前定义好类选择器的样式,通过元素的className属性来设置其class属性值


    控制样式

    div
    div2

四、事件☆(事件的监听机制)

1.概述

  • 概念:某些组件被执行了某些操作后,触发了某些代码的执行

  • 事件:某些操作,如单击onclick,双击,键盘按下,鼠标移动

  • 事件源:component组件,如按钮,文本输入框……

  • 监听器:js代码。

  • 注册监听:将事件、事件源和监听器结合在一起,当事件源上发生了某个事件,则触发执行某个监听器代码

  • 常见的事件

  • 点击事件

  • onclick:单击事件

  • ondblclick:双击事件

  • 焦点事件☆

  • onblur:元素失去焦点

  • onfocus:获得焦点

  • 加载事件

  • onload: 一张页面或一幅图像完成加载。

  • 鼠标事件

  • onmousedown:鼠标按钮被按下。

  • onmousemove:鼠标被移动。

  • onmouseout:鼠标从某元素移开。

  • onmouseover:鼠标移到某元素之上。

  • onmouseup:鼠标按键被松开。

  • 键盘事件

  • onkeydown 某个键盘按键被按下。

  • onkeypress 某个键盘按键被按下并松开。

  • onkeyup 某个键盘按键被松开。

  • 选中和改变

  • onchange 域的内容被改变。

  • onselect 文本被选中。

  • 表单事件

  • onsubmit 确认按钮被点击。

  • onreset 重置按钮被点击。

2、常见事件演示

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>常见事件</title>
    <script>
        /*
        常见的事件
            点击事件
                onclick:单击事件
                ondblclick:双击事件
            焦点事件☆
                onblur:元素失去焦点
                    常用于表单校验
                onfocus:获得焦点
            加载事件
                onload: 一张页面或一幅图像完成加载。
                    onload 事件会在页面或图像加载完成后立即发生。
            鼠标事件
                onmousedown:鼠标按钮被按下。
                    定义方法时,定义一个形参,接收event对象
                    event对象的button属性可以获取哪个鼠标按钮被点击了012
                onmousemove:鼠标被移动。
                onmouseout:鼠标从某元素移开。
                onmouseover:鼠标移到某元素之上。

                onmouseup:鼠标按键被松开。
            键盘事件
                onkeydown    某个键盘按键被按下。
                onkeypress    某个键盘按键被按下并松开。
                onkeyup    某个键盘按键被松开。
            选中和改变
                onchange    域的内容被改变。
                    常用于select下拉列表
                onselect    文本被选中。
            表单事件
                onsubmit    确认按钮被点击。
                    可以阻止表单的提交
                        方法返回false则阻止表单提交
                onreset    重置按钮被点击。
        * */

        //2.加载完成事件 onload
        window.onload = function () {
            //1.失去焦点事件
            //此时获取不到
            /*document.getElementById("username").onblur = function () {
                alert("失去焦点了");
            }
            //3.绑定鼠标事件,鼠标移动到元素之上onmouseover
            document.getElementById("username").onmouseover = function () {
                alert("鼠标来了");
            }*/
            //绑定鼠标点击事件
            /*document.getElementById("username").onmousedown= function () {
                alert("鼠标点击了");
            }*/
            /*//判断点击的是左键还是右键
            document.getElementById("username").onmousedown= function (event) {
                alert(event.button);
            }*/
            //判断点击的是左键还是右键
            /*document.getElementById("username").onkeydown= function (event) {
                //alert(event.keyCode);//回车是13
                if (event.keyCode==13){
                    alert("提交成功");
                }
            }*/
            //onchange
            /*document.getElementById("city").onchange= function () {
                alert("改变了");
            }*/
            //表单onsubmit
            document.getElementById("form").onsubmit = function () {
                //校验用户名格式是否正确
                var flag = false;
                return flag;//根据返回值决定表单是否提交
            }
        }
            function checkForm(){
                return false;
            }
            /*
                function fun(){
                    checkForm();
                }
            * */
    </script>

</head>
<body>
    <!--<form action="#" method="post" onsubmit="checkForm()" id="form">-->
    <!--<form action="#" method="post"  id="form">-->
    <form action="#" method="post" onclick="return checkForm()" id="form">
    <input id="username" ><br>
    <select name="" id="city">
        <option value="">--请选择--</option>
        <option value="">北京</option>
        <option value="">上海</option>
        <option value="">合肥</option>
    </select><br>
        <input type="submit" value="提交">
    </form>

</body>
</html>

3.案例1:表单全选

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>表格全选</title>
    <style>
        table{
            border: 1px solid;
            width: 500px;
            margin-left: 30%;
        }

        td,th{
            text-align: center;
            border: 1px solid;
        }
        div{
            margin-top: 10px;
            margin-left: 30%;
        }
        /*移出移入*/
        .over{
            background-color: pink;
        }
        .out{
            background-color: white;
        }
    </style>
    <script>
        /*
            分析:
                1.全选
                    获取所有的checkbox
                    遍历cb,设置每一个cb的属性状态为选中  checked    设置或返回 checkbox 是否应被选中。
        * */
        //1.在页面加载完成之后绑定事件
        window.onload = function () {
            //2.给全选按钮绑定单击事件
            document.getElementById("selectAll").onclick = function () {
                //获取所有的cb
                var cbs = document.getElementsByName("cb");
                //遍历cb\
                for (var i =0; i<cbs.length;i++){
                    //3.设置每一个cb的状态为选中
                    cbs[i].checked=true;
                }
            }
            //全不选
            document.getElementById("unSelectAll").onclick = function () {
                //获取所有的cb
                var cbs = document.getElementsByName("cb");
                //遍历cb\
                for (var i =0; i<cbs.length;i++){
                    //3.设置每一个cb的状态为选中
                    cbs[i].checked=false;
                }
            }
            //反选
            document.getElementById("selectRev").onclick = function () {
                //反选
                var cbs = document.getElementsByName("cb");
                //遍历cb\
                for (var i =0; i<cbs.length;i++){
                    //3.设置每一个cb的状态为选中
                    cbs[i].checked = !cbs[i].checked;
                }
            }
            //第一个被选中,其他的等于第一行的状态
            document.getElementById("firstcb").onclick = function () {
                //第一个
                var cbs = document.getElementsByName("cb");
                //遍历cb\
                //alert(this);
                for (var i =0; i<cbs.length;i++){
                    //3.设置每一个cb的状态为第一个cb的状态
                    cbs[i].checked = this.checked;
                }
            }
            //鼠标移入变红色,给鼠标移入和移出绑定事件
            var trs = document.getElementsByTagName("tr");
            //2.遍历  ctrl+j是查看所有快捷键
            for(var i = 0; i < trs.length; i++) {
                //移到元素之上
                trs[i].onmouseover = function () {
                    this.className="over";
                }
                //移出元素
                trs[i].onmouseout = function () {
                    this.className="out";
                }
            }
        }
    </script>
</head>
<body>
<table>
    <caption>学生信息表</caption>
    <tr>
        <th><input type="checkbox" name="cb" id="firstcb"></th>
        <th>编号</th>
        <th>姓名</th>
        <th>性别</th>
        <th>操作</th>
    </tr>
    <tr>
        <td><input type="checkbox" name="cb"></td>
        <td>1</td>
        <td>令狐冲</td>
        <td>男</td>
        <td><a href="javascript:void(0);">删除</a></td>
    </tr>
    <tr>
        <td><input type="checkbox" name="cb"></td>
        <td>2</td>
        <td>任我行</td>
        <td>男</td>
        <td><a href="javascript:void(0);">删除</a></td>
    </tr>
    <tr>
        <td><input type="checkbox" name="cb"></td>
        <td>3</td>
        <td>岳不群</td>
        <td>?</td>
        <td><a href="javascript:void(0);">删除</a></td>
    </tr>
</table>
<div>
    <input type="button" id="selectAll" value="全选">
    <input type="button" id="unSelectAll" value="全不选">
    <input type="button" id="selectRev" value="反选">
</div>
</body>
</html>

4.案例:表单校验

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>注册页面</title>
    <style>
        * {
            margin: 0px;
            padding: 0px;
            box-sizing: border-box;
        }

        body {
            background: url("img/register_bg.png") no-repeat center;
            padding-top: 25px;
        }

        .rg_layout {
            width: 900px;
            height: 500px;
            border: 8px solid #EEEEEE;
            background-color: white;
            /*让div水平居中*/
            margin: auto;
        }

        .rg_left {
            /*border: 1px solid red;*/
            float: left;
            margin: 15px;
        }

        .rg_left > p:first-child {
            color: #FFD026;
            font-size: 20px;
        }

        .rg_left > p:last-child {
            color: #A6A6A6;
            font-size: 20px;

        }

        .rg_center {
            float: left;
            /* border: 1px solid red;*/

        }

        .rg_right {
            /*border: 1px solid red;*/
            float: right;
            margin: 15px;
        }

        .rg_right > p:first-child {
            font-size: 15px;

        }

        .rg_right p a {
            color: pink;
        }

        .td_left {
            width: 100px;
            text-align: right;
            height: 45px;
        }

        .td_right {
            padding-left: 50px;
        }

        #username, #password, #email, #name, #tel, #birthday, #checkcode {
            width: 251px;
            height: 32px;
            border: 1px solid #A6A6A6;
            /*设置边框圆角*/
            border-radius: 5px;
            padding-left: 10px;
        }

        #checkcode {
            width: 110px;
        }

        #img_check {
            height: 32px;
            vertical-align: middle;
        }

        #btn_sub {
            width: 150px;
            height: 40px;
            background-color: #FFD026;
            border: 1px solid #FFD026;
        }

        #td_sub{
            padding-left: 150px;
        }

        .error{
            color:red;
            vertical-align: middle;
        }
    </style>
    <script>
        /*
            分析:
                1.给表单绑定onsubmit事件,监听器中判断每一个方法校验的结果
                    如果都为true,则监听器方法返回true
                    如果有一个为false,则监听器方法返回false
                2.定义一些方法,分别校验各个表单项
                3.给各个表单项绑定onblur事件,离开就校验
        * */
        window.onload = function () {
            //1.给表单绑定onsubmit事件,监听器中判断每一个方法校验的结果
            document.getElementById("form").onsubmit = function () {
                //调用用户名校验方法 checkUsername()

                //调用密码校验方法  checkPassword()

                return checkUsername() && checkPassword();
            }
            //给用户和密码框分别绑定离开焦点的时间
            document.getElementById("username").onblur =checkUsername;
            document.getElementById("password").onblur =checkPassword;
        }
        //校验用户名
        function checkUsername() {
            //1.获取用户名的值
            var username = document.getElementById("username").value;
            //2.定义正则表达式
            var reg_username = /^\w{6,12}$/;
            //3.判断值是否符合正则的规则
            var flag = reg_username.test(username);
            var s_username = document.getElementById("s_username");
            //4.提示信息
            if (flag){
                //提示绿色对勾
                s_username.innerHTML = "<img width='35px' height='25px' src='img/gou.png'>"
            }else{
                //提示红色用户名有误
                s_username.innerHTML = "用户名格式有误";
            }
            return flag;
        }
        //验证密码
        function checkPassword() {
            //1.获取用户名的值
            var password = document.getElementById("password").value;
            //2.定义正则表达式
            var reg_password = /^\w{6,12}$/;
            //3.判断值是否符合正则的规则
            var flag = reg_password.test(password);
            var s_password = document.getElementById("s_password");
            //4.提示信息
            if (flag){
                //提示绿色对勾
                s_password.innerHTML = "<img width='35px' height='25px' src='img/gou.png'>"
            }else{
                //提示红色用户名有误
                s_password.innerHTML = "密码格式有误";
            }
            return flag;
        }
    </script>
</head>
<body>
<div class="rg_layout">
    <div class="rg_left">
        <p>新用户注册</p>
        <p>USER REGISTER</p>
    </div>
    <div class="rg_center">
        <div class="rg_form">
            <!--定义表单 form-->
            <form action="#" id="form" method="get">
                <table>
                    <tr>
                        <td class="td_left"><label for="username">用户名</label></td>
                        <td class="td_right">
                            <input type="text" name="username" id="username" placeholder="请输入用户名">
                            <span id="s_username" class="error"></span>
                        </td>
                    </tr>
                    <tr>
                        <td class="td_left"><label for="password">密码</label></td>
                        <td class="td_right">
                            <input type="password" name="password" id="password" placeholder="请输入密码">
                            <span id="s_password" class="error"></span>
                        </td>
                    </tr>
                    <tr>
                        <td class="td_left"><label for="email">Email</label></td>
                        <td class="td_right"><input type="email" name="email" id="email" placeholder="请输入邮箱"></td>
                    </tr>
                    <tr>
                        <td class="td_left"><label for="name">姓名</label></td>
                        <td class="td_right"><input type="text" name="name" id="name" placeholder="请输入姓名"></td>
                    </tr>
                    <tr>
                        <td class="td_left"><label for="tel">手机号</label></td>
                        <td class="td_right"><input type="text" name="tel" id="tel" placeholder="请输入手机号"></td>
                    </tr>
                    <tr>
                        <td class="td_left"><label>性别</label></td>
                        <td class="td_right">
                            <input type="radio" name="gender" value="male" checked> 男
                            <input type="radio" name="gender" value="female"> 女
                        </td>
                    </tr>
                    <tr>
                        <td class="td_left"><label for="birthday">出生日期</label></td>
                        <td class="td_right"><input type="date" name="birthday" id="birthday" placeholder="请输入出生日期">
                        </td>
                    </tr>
                    <tr>
                        <td class="td_left"><label for="checkcode">验证码</label></td>
                        <td class="td_right"><input type="text" name="checkcode" id="checkcode" placeholder="请输入验证码">
                            <img id="img_check" src="img/verify_code.jpg">
                        </td>
                    </tr>
                    <tr>
                        <td colspan="2"  id="td_sub"><input type="submit" id="btn_sub" value="注册"></td>
                    </tr>
                </table>
            </form>
        </div>
    </div>
    <div class="rg_right">
        <p>已有账号?<a href="#">立即登录</a></p>
    </div>
</div>
</body>
</html>

来自为知笔记(Wiz)