js事件、监听 ,鼠标事件,键盘,浏览器,表单

js事件

1.什么是事件
一件事情发生了,对其进行处理或者响应。
2. 事件的三要素
事件源,事件类型,事件处理
比如:点击右上角的X,页面关闭。 事件源:X,事件类型:点击 事件处理:页面关闭。
谁引发的后续事件,谁就是事件源。

事件源:DOM节点(一般为元素节点)
事件类型
事件处理 函数(代码块)

事件类型:
1.鼠标事件
2.键盘事件
3.浏览器事件
4.表单事件

鼠标事件

            click ==  鼠标左键单击
            dbclick == 鼠标左键双击
            contextmenu  ==  鼠标右键单击
            mousewheel == 鼠标滚动
            mousedown  == 鼠标单击事件  不管是左键还是右键,还是滚动都可以触发
            mouseup == 鼠标抬起
            mousemove == 鼠标移动
            mouseover == 鼠标移入(会进行事件传播)
            mouseout == 鼠标移出

mouseenter == 鼠标移入(不会进行事件传播)
mouseleave == 鼠标移出

 <script>
         window.onload = function() {
    
    
             var box = document.getElementById("box");
            // box.ondblclick = function() {
    
    
            //     console.log("鼠标双击");
            // }
            // box.onclick = function() {
    
    
            //     console.log("鼠标单击");
            // }
            // box.oncontextmenu = function() {
    
    
            //     console.log("鼠标右键单击");
            // }
            // box.onmousewheel = function() {
    
    
            //     console.log("鼠标滚动");
            // }
            // box.onmousedown = function() {
    
    
            //     console.log("鼠标按下");
            // }
            box.onmouseup = function() {
    
    
                console.log("鼠标抬起");
            }
            box.onmousemove = function() {
    
    
                console.log("鼠标移动");
            }
            // box.onmouseover = function() {
    
    
            //     console.log("鼠标移入");
            // }
            // box.onmouseout = function() {
    
    
            //     console.log("鼠标移出");
            // }
            // box.onmouseenter = function() {
    
    
            //     console.log("鼠标移入");
            // }
            // box.onmouseleave = function() {
    
    
            //     console.log("鼠标移出");
            // }

         }
     </script>
</head>
<body>
    <div id="box"></div>
</body>

用户改变域的内容
onchange

<body>//效果当下拉框的内容发生改变使触发该事件
    城市:
    <select id="city">
        <option>请选择城市</option>
        <option>上海</option>
        <option>北京</option>
    </select>
    <script>
        var city = document.querySelector("#city");
        city.onchange = function() {
    
    
            console.log("内容改变了..")
        }
    </script>
</body>

键盘事件

不是所有的元素都能触发
表单元素(选中效果),document ,window

keydown
键盘按下
keyup
键盘抬起

keypress
键盘按下
在文本框中输入的内容必须与你按下的键是一致的

<!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>
        #box{
    
    
            width: 300px;
            height: 300px;
            background-color: brown;
        }
    </style>
    <script>
          window.onload = function(){
    
    
             var box = document.getElementById("box");
             box.onkeydown = function(){
    
    
                 console.log("键盘按下");
             }//这个元素不能触发
            document.onkeydown = function(){
    
    
                console.log("键盘按下");
            }
            // window.onkeydown = function(){
    
    
            //     console.log("键盘按下");
            // }
            // var inp = document.querySelector("input");
            // inp.onkeypress = function(){
    
    
            //     console.log("键盘按下");
            // }
            // inp.onkeyup = function(){
    
    
            //     console.log("键盘抬起");
            // }
         }
    </script>
</head>
<body>
    <div id="box"></div>
    <input type="text">
</body>
</html>

浏览器事件

window事件

load 页面加载完毕
scroll 页面滚动
resize 窗口尺寸改变
offline 网络断开
online 网络恢复

<style>
        body{
    
    
            height: 2000px;
        }
    </style>
</head>
<script>
    var i = 0;
    window.onscroll = function(){
    
    
        console.log(i++);//有滚动轴情况下,只要滚就会触发
    }
    window.onresize = function(){
    
    
        console.log("页面尺寸改变");//当将浏览器窗口变小的时候
    }
    // window.onoffline = function(){
    
    
    //     console.log("你家网断了");
    // }
    // window.ononline = function(){
    
    
    //     console.log("你家网恢复了");
    // }
</script>
<body>    
</body>

表单事件

表单事件主要是表单元素和form标签的

change 表单内容发生改变时,而且已经失去焦点时触发。

input 表单输入事件

focus 获取焦点

blur 失去焦点

submit 表单提交

reset 表单重置

<script>
        window.onload = function(){
    
    
            var inp = document.querySelector("input");
            var form = document.querySelector("form");
            inp.onchange = function(){
    
    
                console.log("表单内容发生了变化");
            }
            inp.oninput = function(){
    
    
                console.log("你输入了内容");
            }
            inp.onfocus = function(){
    
    
                console.log("获取了焦点");
                this.style.backgroundColor = "red";
            }
            inp.onblur = function(){
    
    
                console.log("失去了焦点");
                this.style.backgroundColor = "blue";
            }
            // form.onsubmit = function(){
    
    
            //     alert("表单提交了");
            // }
            // form.onreset = function(){
    
    
            //     // alert("表单重置");
            //     console.log("表单重置");
            // }
        }
    </script>
</head>
<body>
    <form action="">
        <input type="text" value="">
        <input type="submit" value="提交">
        <input type="reset" value="重置">
    </form>
</body>

表单元素的另外三种获取方法(不用记,知道就好,不用)

</head>
<!-- 表单元素的另外三种获取方法
1 document.表单的name名;
2 document.forms["表单的name名"];
3 document.forms[索引]; -->不用记这三种不用
<body>
    <form name="form1" action="https://www.baidu.com/">表单
        <input type="text">
    </form>
</body>
<script>
    // var form1 = document.form1;
    //var form1 = document.forms["form1"];
    //var form1 = document.forms[0];
    console.log(form1);
</script>

获取表单内容并提交的三种方式(优先用第一种)

<body>
    第一种方式/使用的是普通按钮的提交 获取表单.submit();这个方法提交
    <form action="https://www.baidu.com/" id="biao">
        姓名:<input id="nei" type="text">
        <input type="button" value="提交表单1" οnclick="tijiao()"></input>
    </form>
    <hr>第二种方式使用的是submit加οnclick="return 函数()"函数运行为真时提交,为假时不提交
    <form action="https://www.baidu.com/">
        姓名:<input id="nei2" type="text">
        <input type="submit" value="提交表单2" οnclick="return tijiao()"></input>
    </form>
    <hr>第三种方式和第二种差不多,提交功能函数书写位置不同,原理一样
    <form action="https://www.baidu.com/" οnsubmit="return tijiao()">
        姓名:<input id="nei3" type="text">
        <input type="submit" value="提交表单3"></input>
    </form>
</body>
<script>
    function tijiao() {
    
    
        var nei = document.getElementById("nei").value; //获取表单内容
        if (nei == null || nei.trim() == '') {
    
    
            return; //判断表单内容为空时不提交
        }
        var biao = document.getElementById("biao"); //获取到表单元素节点
        biao.submit(); //提交表单,这一步才是提交了表单
    }
    //-----二和三方法车不多,只是赋予提交功能函数的书写位置不同-------利用的是return false不提交true提交这个特性-------------------------------------------------
    function tijiao() {
    
    
        var nei = document.getElementById("nei2").value;
        if (nei == null || nei.trim() == '') {
    
    
            return false;
        } else {
    
    
            return true;
        }
    }
    //------------------------------------------------------
    function tijiao() {
    
    
        var nei = document.getElementById("nei3").value;
        if (nei == null || nei.trim() == '') {
    
    
            return false;
        } else {
    
    
            return true;
        }
    }
</script>

事件绑定方式

1.行内式
在标签中直接通过on+事件类型 属性 去绑定事件

   <div id="box" onclick="show()"></div>

2.内联式
(1)直接绑定匿名函数
(2)先定义函数,再去绑定

  var box = document.getElementById("box");
            box.onclick = function(){
    
    
                alert("直接绑定匿名函数");
            }

监听

addEventListener
语法:事件源.addEventListener(“事件类型”,事件处理函数);

 <script>
        window.onload = function() {
    
    
            var btn = document.querySelector("button");
            console.log(btn);
            btn.addEventListener('click', function() {
    
    
                alert("监听弹出..")
            })
        }
    </script>
/*<script>也可以这样写
        window.onload = function() {
            var btn = document.querySelector("button");
            console.log(btn);
            btn.addEventListener('click', dian)
            function dian() {
                alert("监听弹出..")
            }
        }
    </script>*/
</head>

<body>
    <button>点击我</button>
</body>
   addEventListener 第三个参数为true的话 表示捕获。 false 表示 冒泡。          
    <style>
        #div1{
    
    
            background-color: #27ae60;
        }
        #div2{
    
    
            background-color: #e67e22;
        } 
        #div3{
    
     
            background-color: #e74c3c;
        }
        #div1,#div2,#div3,#other{
    
    
            padding: 50px;
        }
        
    </style>
    <script>
        window.onload  = function(){
    
    
            var boxs = document.getElementsByTagName("div");
            for (var i = 0; i < boxs.length; i++) {
    
    
                boxs[i].dataset.index = i+1;
                boxs[i].addEventListener('click',function(){
    
    
                   alert("div" + this.dataset.index);
                },false) //你写的监听默认是冒泡状态,可以改为true为捕获(从大范围到小)   
            }
        }
    </script>
</head>
<body>
    <div id="div1">
        <div id="div2">
            <div id="div3"></div>
        </div>
    </div>
</body>

使用监听,可以给同一个事件类型绑定多个事件处理函数。
多个事件处理函数执行顺序是按照绑定顺序来的
先绑定先执行

<script>
        window.onload = function() {
    
    
            var btn = document.querySelector("button");
            console.log(btn);
            btn.addEventListener('click', ji);//先绑定,所以弹出2 输出时在 1的前面
            btn.addEventListener('click', dian);

            function dian() {
    
    
                console.log("监听弹出1..");
            }

            function ji() {
    
    
                console.log("监听弹出2..")
            }
        }
    </script>
</head>

<body>
    <button>点击我</button>
</body>

在IE低版本不支持
attachEvent()
IE低版本支持
语法:事件源.attachEvent(“on+事件类型”,事件处理函数);
多个事件处理函数的执行顺序是按照绑定顺序的倒序来的
先绑定后执行

事件解绑

对于非监听方式,可以直接将null赋值。(也叫事件解绑)

  box.onclick = function(){
    
    
               alert("您已成功充值1000万!");
                 box.onclick = null;//弹一次就会停止
             }
             box.onclick = null;//放外面一次都不会弹

对于监听方式绑定解绑方法
标准浏览器
removeEventListener(“事件类型”,事件处理函数);
【注意】 如果你想要解绑事件,那么你在绑定事件时,一定要将函数单独定义。使用函数名的方式去绑定事件。(匿名函数是没办法解绑的)

IE低版本
detachEvent(“on+事件类型”,事件处理函数);

  <script>
        window.onload = function(){
    
    
            var  box=document.querySelector("#box");
            function show() {
    
    
                alert("您已成功充值1000万!");
            }
            box.addEventListener("click",show);事件监听方式绑定
            box.removeEventListener("click",show);  解绑,一次都不执行    
        }
    </script>
</head>
<body>
    <div id="box"></div>
</body>

为事件绑定做兼容

        window.onload = function(){
    
    
        /**
            ele 事件源
            type 事件类型
            handler 事件处理函数
        */
            function on(ele,type,handler) {
    
    
                // 标准浏览器
                if (ele.addEventListener) {
    
    
                    ele.addEventListener(type,handler);//下面调用时加引号了,所以这里没加
                }else{
    
    
                    // IE浏览器
                    ele.attachEvent("on"+type,handler);
                }
            }
            function show(){
    
    
                alert("您已成功充值1000万!");
            }
            var box = document.getElementById("box");
            on(box,"click",show);//调用传参

        }
    </script>
</head>
<body>
    <div id="box">    </div>
</body>

获取下拉框的值练习

<body>
    城市:
    <select id="unform">
        <option value="-1">请选择</option>
        <option value="beijing">北京</option>
        <option value="-1">上海</option>
        <option>深圳</option>
    </select>
    <button id="sub">获取城市名</button>
</body>
<script>
    var unform = document.getElementById("unform"); //1~下拉框
    var sub = document.getElementById("sub"); //获取按钮
    sub.onclick = function() {
    
    
            //2~获取下拉框的所有下拉选项 必须是这个单词options
            var selections = unform.options;
            //console.log(selections);输出所有的下拉框option
            //3~获取下拉框被选中项的索引 必须是这个单词selectedIndex
            var index = unform.selectedIndex;
            //console.log(index); //输出比如北京是1
            /*-------演示和解这道题无关   var val = unform[index];
            console.log(val); 当我获取北京时 <option value="beijing">北京</option>    */

            //4~获取被选中项的值(注意:当通过option获取选中项的value属性值时,当有value属性时输出value值,当没有value属性时输出option的文本)
            var val = selections[index].value;
            // console.log(val);
            //5~获取被选中项的文本(上海/深圳直接是文本)
            var txt = selections[index].text;
            console.log(txt);
            //设置下拉选项默认被选中演示这里用不到
            //selections[2].selected = true;
        }
        /* //可以发现第二步可以不用要 //2~获取下拉框的所有下拉选项 必须是这个单词options
             var selections = unform.options;
            用这个也可以 var val = unform[index].value;
            var txt = unform[index].text;*/
</script>

猜你喜欢

转载自blog.csdn.net/z18237613052/article/details/112792785