JavaScript进阶

DOM简单学习:为了满足案例要求

* 功能:控制html文档的内容
* 获取页面标签(元素)对象:Element
    * document.getElementById("id值"):通过元素的id获取元素对象

* 操作Element对象:
    1. 修改属性值:
        1. 明确获取的对象是哪一个?
        2. 查看API文档,找其中有哪些属性可以设置
    2. 修改标签体内容:
        * 属性:innerHTML
        1. 获取元素对象
        2. 使用innerHTML属性修改标签体内容

注:IE、edge和谷歌浏览器无法完全展示,切换火狐浏览器可以

代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>我要获取元素对象</title>
</head>
<body>
<img src="../../img/JavaScript/off.gif" id="light">
<h1 id="title">我自闭了QAQ</h1>

<script>
    //   * document.getElementById("id值"):通过元素的id获取元素对象
    //通过id获取元素对象
    var light = document.getElementById("light");
    alert("我要换图片了。。。");
    light.src = "../../img/JavaScript/on.gif";

    //1.获取h1标签对象
    var title = document.getElementById("title");
    alert("我要换内容了。。。");
    //2.修改内容
    title.innerHTML = "我想开了!";

</script>

</body>
</html>

事件简单学习

* 功能: 某些组件被执行了某些操作后,触发某些代码的执行。
    * 造句:  xxx被xxx,我就xxx
        * 我方水晶被摧毁后,我就责备对友。
        * 敌方水晶被摧毁后,我就夸奖自己。

* 如何绑定事件
    1. 直接在html标签上,指定事件的属性(操作),属性值就是js代码
        1. 事件:onclick--- 单击事件

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

    * 代码:      

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>我是事件绑定</title>
</head>
<body>
<img src="../../img/JavaScript/off.gif" id="light" onclick="fun();">
<img src="../../img/JavaScript/off.gif" id="light2">

<script>
    function fun() {
        alert("我被点了。");
        alert("我又被点了!");
    }

    function fun2() {
        alert("我为啥老被点?!");
    }

    //1.获取light2对象
    var li2 = document.getElementById("light2");
    //2.绑定事件
    li2.onclick = fun2;

</script>

</body>
</html>

电灯开关案例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>我是电灯开关</title>
</head>
<body>
<img src="../../img/JavaScript/off.gif" id="light">
<script>
    //1.获取图片对象
    var light = document.getElementById("light");

    var flag = false;//代表灯是灭的 off图片

    //2.绑定单击事件
    light.onclick = function(){
        if(flag){//3.判断如果灯是开的,则灭掉
            light.src = "../../img/JavaScript/off.gif";
            flag = false;
        }else{
            //3.如果灯是灭的,则打开
            light.src = "../../img/JavaScript/on.gif";
            flag = true;
        }
    }
</script>
</body>
</html>

BOM:

1. 概念:Browser Object Model 浏览器对象模型
    * 将浏览器的各个组成部分封装成对象。

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

3. Window:窗口对象
    1. 创建
    2. 方法
         1. 与弹出框有关的方法:
            alert()    显示带有一段消息和一个确认按钮的警告框。
            confirm()    显示带有一段消息以及确认按钮和取消按钮的对话框。
                * 如果用户点击确定按钮,则方法返回true
                * 如果用户点击取消按钮,则方法返回false
            prompt()    显示可提示用户输入的对话框。
                * 返回值:获取用户输入的值

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Windows对象1</title>
    <script>
        // Window:窗口对象
        //1. 创建
    alert("hello window");
    window.alert("hello a");
    /*2. 方法
        1. 与弹出框有关的方法:
          alert()	显示带有一段消息和一个确认按钮的警告框。
          confirm()	显示带有一段消息以及确认按钮和取消按钮的对话框。
             * 如果用户点击确定按钮,则方法返回true
             * 如果用户点击取消按钮,则方法返回false
           prompt()	显示可提示用户输入的对话框。
             * 返回值:获取用户输入的值*/
         //确认框
         var flag = confirm("您确定要退出吗?");

         if(flag){
             //退出操作
             alert("欢迎下次光临!");
         }else{
             //提示:手别抖...
             alert("手别抖...");
         }

    </script>
</head>
<body>

</body>
</html>


         2. 与打开关闭有关的方法:
            close()    关闭浏览器窗口。
                * 谁调用我 ,我关谁
            open()    打开一个新的浏览器窗口
                * 返回新的Window对象
         3. 与定时器有关的方式
            setTimeout()    在指定的毫秒数后调用函数或计算表达式。
                * 参数:
                    1. js代码或者方法对象
                    2. 毫秒值
                * 返回值:唯一标识,用于取消定时器
            clearTimeout()    取消由 setTimeout() 方法设置的 timeout。

            setInterval()    按照指定的周期(以毫秒计)来调用函数或计算表达式。
            clearInterval()    取消由 setInterval() 设置的 timeout。

案例2 轮播图

轮播图和id紧密相关,测试的时候一直是第一张图,后来检查发现写了轮播条件但是img的id属性没写,导致轮播失败,添加id后就能实现轮播了

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>我是轮播图</title>

</head>
<body>
<!--插入图片-->
<img id="img" src="../../img/JavaScript/banner_1.jpg" width="100%">
<script>
    //修改图片src属性
    var number = 1; //初始图片
    function fun() {
        number ++;
        //判断number是否大于3
        if (number > 3) {
            number = 1;  //大于3返回第一张图
        }
        //获取img对象
        var img = document.getElementById("img");  //通过元素的id获取元素对象
        img.src = "../../img/JavaScript/banner_" + number + ".jpg";  //图片src在1 2 3循环
    }
    //定时器
    setInterval(fun,3000);  //3秒一循环
</script>
</body>
</html>

 3. 属性:
        1. 获取其他BOM对象:
            history:获取当前对象的历史记录
            location
            Navigator
            Screen:
        2. 获取DOM对象
            document
   4. 特点
        * Window对象不需要创建可以直接使用 window使用。 window.方法名();
        * window引用可以省略。  方法名();

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Windows对象2</title>
</head>
<body>
<input id="openBtn" type="button" value="打开窗口">
<input id="closeBtn" type="button" value="关闭窗口">
<script>
    /*  2. 与打开关闭有关的方法:
              close()	关闭浏览器窗口。
                * 谁调用我 ,我关谁
              open()	打开一个新的浏览器窗口
                * 返回新的Window对象
       3. 与定时器有关的方式
              setTimeout()	在指定的毫秒数后调用函数或计算表达式。
                * 参数:
                   1. js代码或者方法对象
                   2. 毫秒值
                * 返回值:唯一标识,用于取消定时器
                   clearTimeout()	取消由 setTimeout() 方法设置的 timeout。
                   setInterval()	按照指定的周期(以毫秒计)来调用函数或计算表达式。
                   clearInterval()	取消由 setInterval() 设置的 timeout。
       3. 属性:
            1. 获取其他BOM对象:
                history
                location
                Navigator
                Screen:
            2. 获取DOM对象
               document
      4. 特点
           * Window对象不需要创建可以直接使用 window使用。 window.方法名();
           * window引用可以省略。  方法名();*/
    //输入框
    var result = prompt("请输入用户名");
    alert(result);
    //打开新窗口
    var openBtn = document.getElementById("openBtn");
    var newWindow;
    openBtn.onclick = function () {
        //打开新窗口
        newWindow = open("https://www.baidu.com");
    }

    //关闭新窗口
    var closeBtn = document.getElementById("closeBtn");
    closeBtn.onclick = function () {
        // 关闭新窗口
        newWindow.close();
    }

    //一次性定时器
    setTimeout("fun();", 2000);  //1000毫秒=1秒
    var id = setTimeout(fun, 2000);
    clearTimeout(id); //取消由 setInterval() 设置的 timeout

    function fun() {
        alert('boom~~');
    }

    //循环定时器
    var id = setInterval(fun, 2000);
    clearInterval(id);  //取消由 setInterval() 设置的 timeout


    //获取history 获取当前对象的历史记录
    var h1 = window.history;
    var h2 = history;  //两个都是一样的
    alert(h1);
    alert(h2);

    var openBtn = window.document.getElementById("openBtn");
    alert(openBtn);
    /*document.getElementById("");*/  //和 window.document.getElementById("");效果是一样的
</script>
</body>
</html>

4. Location:地址栏对象
    1. 创建(获取):
        1. window.location
        2. location

    2. 方法:
        * reload()    重新加载当前文档。刷新
    3. 属性
        * href    设置或返回完整的 URL。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>我是Location地址栏对象</title>
</head>
<body>

<input type="button" id="butt" value="刷新">
<input type="button" id="goBaidu" value="去百度">
<script>
    //1.获取按钮
    let butt = document.getElementById("butt");
    //2.绑定单击事件
    butt.onclick = function () {
        //*3.刷新页面 reload()方法  重新加载当前文档。刷新
       location.reload();
    }

    //获取href 属性  设置或返回完整的 URL
    var href = location.href;
    //1.获取按钮
    var goBaidu = document.getElementById("goBaidu");
    //2.绑定单击事件
    goBaidu.onclick = function () {
        //3.去访问www.baidu.com官网
        location.href = "https://www.baidu.com";
    }

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

案例3: 自动跳转页面

代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>我是自动跳转页面</title>
    <!--css设计样式-->
    <style>
        p {
            text-align: center;
        }

        span {
            color: red;
        }
    </style>
</head>
<body>
<!--1.提示语句,初始页面效果-->
    <p>
    <span id="times">5</span>秒之后自动跳转百度页面……
    </p>

<script>
    // 2.倒计时读秒效果实现
    // 1.定义一个方法,获取span标签,修改span标签体内容,时间--
    // 2.定义一个定时器,1秒执行一次该方法
    var second = 5;
    <!--打开新窗口-->
    var time = document.getElementById("times");

    //定义一个方法,获取span标签,修改span标签体内容,时间--
    function showTime() {
second --;
//3.判断时间倒计时小于等于0则跳转页面
        if (second <= 0){
            // window.open("http://www.baidu.com");
            location.href = "http://www.baidu.com";
        }
        time.innerHTML = second + "";
    }

    //设置定时器,1秒执行一次该方法
    setInterval(showTime,1000);  //循环定时器

</script>

</body>
</html>

5. History:历史记录对象
    1. 创建(获取):
        1. window.history
        2. history

    2. 方法:
        * back()    加载 history 列表中的前一个 URL。
        * forward()    加载 history 列表中的下一个 URL。
        * go(参数)    加载 history 列表中的某个具体页面。
            * 参数:
                * 正数:前进几个历史记录
                * 负数:后退几个历史记录
    3. 属性:
        * length    返回当前窗口历史列表中的 URL 数量

效果:以之前的轮播图为例,实现在当前界面历史记录之间跳转

 代码:

<!DOCTYPE HTML>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>我是 History历史记录对象1</title>
</head>
<body>
<input type="button" id="btn" value="获取历史记录个数">
<a href="09_History历史记录对象2.html">09页面</a>
<input type="button" id="forward" value="前进">
<script>
    /*
        History:历史记录对象
            1. 创建(获取):
                1. window.history
                2. history

            2. 方法:
                * back()	加载 history 列表中的前一个 URL。
                * forward()	加载 history 列表中的下一个 URL。
                * go(参数)	    加载 history 列表中的某个具体页面。
                    * 参数:
                        * 正数:前进几个历史记录
                        * 负数:后退几个历史记录
            3. 属性:
                * length	返回当前窗口历史列表中的 URL 数量。     */
    //1.获取按钮
    var btn = document.getElementById("btn");
    //2.绑定单机事件
    btn.onclick = function(){
        //3.获取当前窗口历史记录个数
        var length = history.length;
        alert(length);
    }

    //1.获取按钮
    var forward = document.getElementById("forward");
    //2.绑定单机事件
    forward.onclick = function(){
        //前进
        // history.forward();
        history.go(1);
    }

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


<!DOCTYPE HTML>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>我是 History历史记录对象2</title>
</head>
<body>
<img id="img" src="../../img/JavaScript/banner_1.jpg" width="100%">
<input type="button" id="back" value="后退">
<script>
    /*
        分析:
            1.在页面上使用img标签展示图片
            2.定义一个方法,修改图片对象的src属性
            3.定义一个定时器,每隔3秒调用方法一次。*/

    //修改图片src属性
    var number = 1;
    function fun(){
        number ++ ;
        //判断number是否大于3
        if(number > 3){
            number = 1;
        }
        //获取img对象
        var img = document.getElementById("img");
        img.src = "../../img/JavaScript/banner_"+number+".jpg";
    }

    //2.定义定时器
    setInterval(fun,3000);

    //1.获取按钮
    var back = document.getElementById("back");
    //2.绑定单机事件
    back.onclick = function(){
        //后退
        // history.back();
        history.go(-1);
    }

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

DOM:

* 概念: Document Object Model 文档对象模型
    * 将标记语言文档的各个组成部分,封装为对象。可以使用这些对象,对标记语言文档进行CRUD的动态操作

* W3C DOM 标准被分为 3 个不同的部分:

    * 核心 DOM - 针对任何结构化文档的标准模型
        * Document:文档对象
        * Element:元素对象
        * Attribute:属性对象
        * Text:文本对象
        * Comment:注释对象

        * Node:节点对象,其他5个的父对象
    * XML DOM - 针对 XML 文档的标准模型
    * HTML DOM - 针对 HTML 文档的标准模型

* 核心DOM模型:
    * Document:文档对象
        1. 创建(获取):在html dom模型中可以使用window对象来获取
            1. window.document
            2. document  (也可以直接写)
        2. 方法:
            1. 获取Element对象:
                1. getElementById():根据id属性值获取元素对象。id属性值一般唯一
                2. getElementsByTagName():根据元素名称获取元素对象们。返回值是一个数组
                3. getElementsByClassName():根据Class属性值获取元素对象们。返回值是一个数组
                4. getElementsByName(): 根据name属性值获取元素对象们。返回值是一个数组

<!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>
   /* 2. 方法:
            1. 获取Element对象:
                1. getElementById()	: 根据id属性值获取元素对象。id属性值一般唯一
                2. getElementsByTagName():根据元素名称获取元素对象们。返回值是一个数组
                3. getElementsByClassName():根据Class属性值获取元素对象们。返回值是一个数组
                4. getElementsByName(): 根据name属性值获取元素对象们。返回值是一个数组  */
           
    //2.根据元素名称获取元素对象们。返回值是一个数组
    var divs = document.getElementsByTagName("div");
    alert(divs.length);  //5
    //3.根据Class属性值获取元素对象们。返回值是一个数组
    var div_cls = document.getElementsByClassName("cls1");
    alert(div_cls.length);//2
    //4.根据name属性值获取元素对象们。返回值是一个数组
    var ele_username = document.getElementsByName("username");
    alert(ele_username.length);//1

    //createElement("table")创建table元素节点
    var table = document.createElement("table");
    alert(table);//[object HTMLTableElement]

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


            2. 创建其他DOM对象:
                createAttribute(name)   创建拥有指定名称的属性节点,并返回新的Attr对象
                createComment()   创建注释节点
                createElement()   创建元素节点
                createTextNode() 创建文本节点
        3. 属性
    * Element:元素对象
        1. 获取/创建:通过document来获取和创建
        2. 方法:
            1. removeAttribute():删除属性
            2. setAttribute():设置属性

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>我是Element对象</title>
</head>
<body>
<a>点我试一试</a>
<input type="button" id="btn_set" value="设置属性">
<input type="button" id="btn_remove" value="删除属性">

<script>
    //获取btn
    var btn_set =document.getElementById("btn_set");
    btn_set.onclick = function(){
        //1.获取a标签
        var element_a = document.getElementsByTagName("a")[0];
        element_a.setAttribute("href","https://www.baidu.com");
    }

    //获取btn
    var btn_remove =document.getElementById("btn_remove");
    btn_remove.onclick = function(){
        //1.获取a标签
        var element_a = document.getElementsByTagName("a")[0];
        element_a.removeAttribute("href");
    }
</script>
</body>
</html>


    * Node:节点对象,其他5个的父对象
        * 特点:所有dom对象都可以被认为是一个节点
        * 方法:
            * CRUD dom树:
                * appendChild():向节点的子节点列表的结尾添加新的子节点。
                * removeChild()    :删除(并返回)当前节点的指定子节点。
                * replaceChild():用新节点替换一个子节点。
        * 属性:
                * parentNode 返回节点的父节点。

 案例4 动态表格

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>我是动态表格</title>

    <style>
        div{
            text-align: center;
            margin: 45px;
        }

        table{
            border: 1px solid;
            margin: auto;
            width: 500px;
        }

        tr,td{
            text-align: center;
            border: 1px solid;
        }


    </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" id="add" value="添加">
</div>

<!--学生信息表-->
<table align="center">
    <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>  <!--点击链接后,页面不动,只打开链接-->
<!--href=”javascript:void(0);”的含义
即让超链接去执行一个js函数,而不是去跳转到一个地址,而void(0)表示一个空的方法,也就是不执行js函数。
javascript:是伪协议,表示url的内容通过javascript执行。void(0)表示不作任何操作,这样会防止链接跳转到其他页面。这么做其实往往是为了保留链接的样式,但不让链接执行实际操作。-->
    </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. 获取table,将tr添加到table中
            2.删除:
                1.确定点击的是哪一个超链接
                    <a href="javascript:void(0);" onclick="delTr(this);" >删除</a>
                2.怎么删除?
                    removeChild():通过父节点删除子节点*/

    //1.获取"添加"按钮
     document.getElementById("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的标签体
         //id 的 td
         var td_id = document.createElement("td");
         var text_id = document.createTextNode(id);  //添加文本节点
         td_id.appendChild(text_id);   //appendChild():向节点的子节点列表的结尾添加新的子节点。
         //name 的 td
         var td_name = document.createElement("td");
         var text_name = document.createTextNode(name);
         td_name.appendChild(text_name);
         //gender 的 td
         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");
         ele_a.setAttribute("href","javascript:void(0);");  //setAttribute():设置属性
         ele_a.setAttribute("onclick","delTr(this);");
         var text_a = document.createTextNode("删除");
         ele_a.appendChild(text_a);  //a标签里的文本内容添加进去
         td_a.appendChild(ele_a);   //在td_a里添加超链接ele_a

         //4.创建tr
         var tr = document.createElement("tr");
         //5.添加td到tr中
         tr.appendChild(td_id);
         tr.appendChild(td_name);
         tr.appendChild(td_gender);
         tr.appendChild(td_a);
         //6.获取table
         var table = document.getElementsByTagName("table")[0];
         table.appendChild(tr);
     }

    //使用innerHTML添加
    document.getElementById("add").onclick = function() {
        //2.获取文本框的内容
        var id = document.getElementById("id").value;
        var name = document.getElementById("name").value;
        var gender = document.getElementById("gender").value;

        //获取table
        var table = document.getElementsByTagName("table")[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){
        var table = obj.parentNode.parentNode.parentNode;
        var tr = obj.parentNode.parentNode;

        table.removeChild(tr);
    }


</script>

</body>
</html>

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

    1. 标签体的设置和获取:innerHTML
    2. 使用html元素对象的属性
    3. 控制元素样式
        1. 使用元素的style属性来设置
            如:
                 //修改样式方式1     (直接在方法里设置)
                div1.style.border = "1px solid red";    //新增1px的边框
                div1.style.width = "200px";
                //font-size--> fontSize
                div1.style.fontSize = "20px";
        2. 提前定义好类选择器的样式,通过元素的className属性来设置其class属性值。(比较方便,适合设置很多相同或共通样式)

例一:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>我是DOM的innerHTML</title>
</head>
<body>
<div id="div1">
    div
</div>

<script >
    var div = document.getElementById("div1");
    var innerHTML = div.innerHTML;
    //alert(innerHTML);
    //div标签中替换一个文本输入框
    // div.innerHTML = "<input type='text'>";
    //div标签中追加一个文本输入框
    div.innerHTML += "<input type='text'>";
</script>

</body>
</html>

例三:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>我是DOM控制样式</title>
</head>
<style>
    .d1{
        border: 1px solid red;
        width: 100px;
        height: 100px;
    }

    .d2{
        border: 1px solid blue;
        width: 200px;
        height: 200px;
    }
</style>

</head>
<body>

<div id="div1">
    div1
</div>

<div id="div2">
    div2
</div>

<script>
    var div1 = document.getElementById("div1");
    div1.onclick = function(){
        //修改样式方式1
        //直接在方法里设置
        div1.style.border = "1px solid red";

        div1.style.width = "200px";

        //font-size--> fontSize
        div1.style.fontSize = "20px";

    }

    //  2. 提前定义好类选择器的样式,通过元素的className属性来设置其class属性值。
    // (比较方便,适合设置很多相同或共通样式)
    var div2 = document.getElementById("div2");
    div2.onclick = function(){
        div2.className = "d1";
    }

</script>

</body>
</html>

事件监听机制:

* 概念:某些组件被执行了某些操作后,触发某些代码的执行。    
    * 事件:某些操作。如: 单击,双击,键盘按下了,鼠标移动了
    * 事件源:组件。如: 按钮 文本输入框...
    * 监听器:代码。
    * 注册监听:将事件,事件源,监听器结合在一起。 当事件源上发生了某个事件,则触发执行某个监听器代码。

* 常见的事件:
    1. 点击事件:
        1. onclick:单击事件
        2. ondblclick:双击事件
    2. 焦点事件
        1. onblur:失去焦点    * 一般用于表单验证
        2. onfocus:元素获得焦点。

    3. 加载事件:
        1. onload:一张页面或一幅图像完成加载。

    4. 鼠标事件:
        1. onmousedown    鼠标按钮被按下。

* 定义方法时,定义一个形参,接受event对象

* event对象的button属性可以获取鼠标按钮键被点击了。

        2. onmouseup    鼠标按键被松开。
        3. onmousemove    鼠标被移动。
        4. onmouseover    鼠标移到某元素之上。
        5. onmouseout    鼠标从某元素移开。

5. 键盘事件:

        1. onkeydown 某个键盘按键被按下。

         2. onkeyup 某个键盘按键被松开。

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

    6. 选择和改变
        1. onchange    域的内容被改变。
        2. onselect    文本被选中。

    7. 表单事件:
        1. onsubmit    确认按钮被点击。

* 可以阻止表单的提交

* 方法返回false则表单被阻止提交。

         2. onreset    重置按钮被点击。

案例五 表格全选

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>我是表格全选</title>

    <style>
        table {
            border: 1px solid;
            width: 500px;
            margin-left: auto;
        }

        th, td {
            border: 1px solid;
            text-align: center;
        }

        div {
            text-align: left;
            margin-left: 15%;
        }

        .out{
            background-color: white;
        }
        .over{
            background-color: pink;
        }
    </style>

    <script>
        //1.在页面加载完后绑定事件
        window.onload = function () {

            //2.给全选按钮绑定单击事件1全选
            document.getElementById("selectAll").onclick = function () {
                //1.获取所有的checkbox
                var sel = document.getElementsByName("select");
                //2.遍历
                for (var i=0; i < sel.length; i++){
                    //3.设置每一个cb的状态为选中  checked
                    sel[i].checked = true;
                }
            }

            //2.给全选按钮绑定单击事件2全不选
            document.getElementById("unSelectAll").onclick = function(){
                //1.获取所有的checkbox
                var sel = document.getElementsByName("select");
                //2.遍历
                for (var i = 0; i < sel.length; i++) {
                    //3.设置每一个cb的状态为未选中  checked
                    sel[i].checked = false;
                }
            }

            //2.给全选按钮绑定单击事件3反选
            document.getElementById("selectRev").onclick = function(){
                //1.获取所有的checkbox
                var sel = document.getElementsByName("select");
                //2.遍历
                for (var i = 0; i < sel.length; i++) {
                    //3.设置每一个cb的状态为相反
                    sel[i].checked = !sel[i].checked;
                }
            }

            //2.给全选按钮绑定单击事件4第一个cb点击
            document.getElementById("firstSel").onclick = function(){
                //1.获取所有的checkbox
                var cbs = document.getElementsByName("select");
                //获取第一个select
                //2.遍历
                for (var i = 0; i < cbs.length; i++) {
                    //3.设置每一个select的状态和第一个select的状态一样
                    cbs[i].checked =  this.checked;
                }
            }

            //给所有tr绑定鼠标移到元素之上和移出元素事件
            var trs = document.getElementsByTagName("tr");
            //2.遍历
            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 align="center">
    <caption>学生信息表</caption>

    <!--表头-->
    <tr>
        <th><input type="checkbox" name="select" id="firstSel"></th>
        <th>编号</th>
        <th>姓名</th>
        <th>性别</th>
        <th>操作</th>
    </tr>

    <tr>
        <td><input type="checkbox" name="select"></td>
        <td>1</td>
        <td>李火旺</td>
        <td>男</td>
        <td><a href="javascript:void(0);" onclick="delTr(this);">删除</a></td>  <!--点击链接后,页面不动,只打开链接-->
        <!--href=”javascript:void(0);”的含义
        即让超链接去执行一个js函数,而不是去跳转到一个地址,而void(0)表示一个空的方法,也就是不执行js函数。
        javascript:是伪协议,表示url的内容通过javascript执行。void(0)表示不作任何操作,这样会防止链接跳转到其他页面。这么做其实往往是为了保留链接的样式,但不让链接执行实际操作。-->
    </tr>

    <tr>
        <td><input type="checkbox" name="select"></td>
        <td>2</td>
        <td>诸葛渊</td>
        <td>男</td>
        <td><a href="javascript:void(0);" onclick="delTr(this);">删除</a></td>
    </tr>

    <tr>
        <td><input type="checkbox" name="select"></td>
        <td>3</td>
        <td>李岁</td>
        <td>女</td>
        <td><a href="javascript:void(0);" onclick="delTr(this);">删除</a></td>
    </tr>

</table>

<div>
    <input type="submit" value="全选" id="selectAll">
    <input type="submit" value="全不选" id="unSelectAll">
    <input type="submit" value="反选" id="selectRev">
</div>


</body>
</html>

 案例6 表单验证

出现问题:

提示语句出现的位置本应该在后面却出现在下面了

可能出现的原因:

输入框过长导致提示框不够写分行了

解决方案:

设置外边框查看,调节td表格宽度和input输入框宽度,成功啦! 

 去掉外边框

之前只做了用户名和密码输入之前的验证是正常的,结果加入了其他的验证之后发生了还未输入就已验证的情况如图所示:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值