# DOM操作之事件监听

作者: 多叉树;转载须注明出处

# 事件监听

事件监听是浏览器实现交互的重要技术之一, 比如页面的按钮,我们点击它,就会触发一些相应的事件逻辑,我们点击动作被浏览器捕捉到,这个事件就被成为点击事件

由于输入设备以及输入设备的操作不同,所以要封装很多监听事件

常用的监听事件还有

  • 鼠标的单击事件
  • 鼠标的双击事件
  • 鼠标的滑轮滚动sh
  • 键盘的按下事件
  • 键盘的抬起事件

js 提供了一系列监听事件的方法

# 常用的鼠标监听事件

onclick 鼠标单机某个元素
ondblclick 鼠标双击某个元素
onmousedown 鼠标在某个元素上按下
onmouseup 鼠标在某个元素上抬起
onmousemove 鼠标在某个元素上移动
onmouseenter 鼠标进入某个元素
onmouseleave 鼠标离开某个元素
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Normal Listner</title>

    <style>
        #divBox {
            width: 200px;
            height: 200px;
            background-color: green;
        }
    </style>
</head>
<body>
    <div id="divBox"></div>
    <script>

        var divBox = document.getElementById('divBox');
        divBox.onclick = function(event) {
            console.log('onclick listener');
            console.log(event);

        };

        divBox.ondblclick = function(event) {
            console.log('ondblclick');
            console.log(event);

        }

        divBox.onmousedown = function(event) {
            console.log('onmousedown ');
            console.log(event);
        }

        divBox.onmouseup = function(event) {
            console.log('onmouseup ');
            console.log(event);
        }

        divBox.onmousemove = function(event) {
            console.log('onmousemove')
            console.log(event);
        }
        
        divBox.onmouseenter = function(event) {
            console.log('onmouseenter');
            console.log(event);
        }

        divBox.onmouseleave = function(event){
            console.log('onmouseleave')
            console.log(event);
        }

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

# 常用的键盘监听事件

事件名 事件描述
onkeypress 当某个键盘的键被按下,箭头等一些功能键无法被正确识别到
onkeydown 当某个键盘的键被按下, 箭头等一些功能键无法被正确识别到
onkeypup 键盘某个键被松开时
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>键盘键监听</title>
</head>
<body>
    姓名
    <input type="text" id="nameField">
    <script>
        var nameFiled = document.getElementById('nameField');
        
        nameFiled.onkeypress = function(e) {
            console.log(e);
            console.log("onkeypress");
        }

        nameFiled.onkeydown = function(e){
            console.log("onkeydown");
            console.log(e);

        }

        nameFiled.onkeyup = function() {
            console.log("onkeyup");
            console.log(e);
        }
    </script>
</body>
</html>

# 常见的表单监听事件

表单监听比较重要, 是页面接收用户输入数据,并触发提交数据的重要技术。

事件名 事件描述
onchange 当用户改变域的内容
onfocus 当某元素获得焦点(比如tab键或鼠标点击)
onblur 当某元素失去焦点
onsubmit 当表单被提交
onreset 当表单被重置
oninput 输入时监听持续监听
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>formListener</title>
</head>
<body>
    <form id="myForm">
        <p>姓名 <input type="text" name="nameFiled"></p>
        <p>年龄 <input type="text" name="ageFiled"></p>
        <input type="submit">
    </form>

    <script>
        var myForm = document.getElementById('myForm');
        var nameFiled = myForm.nameFiled;
        var ageFiled = myForm.ageFiled;

        nameFiled.onchange = function(event) {
            console.log('完成修改姓名')
            console.log(event);
        }
        
        nameFiled.oninput = function(event) {
            console.log('input 正在修改姓名');
            console.log(event);
        }

        nameFiled.onfocus = function(event) {
            console.log('姓名框已经得到了焦点');
            console.log(event);
        }

        nameFiled.onblue = function(event) {
            console.log('姓名已经失去焦点');
            console.log(event);
        }

        myForm.onsubmit = function(event) {
            console.log(event);
            alert('你正在提交表单');
        }
    </script>
</body>
</html>

# 常见的页面监听事件

事件名 事件描述
onload 当页面或者图像被完成加载
onunload 当用户关闭界面 (避免使用此方法,这个方法实在看不出效果)
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Windos.onLoad</title>
</head>
<body>
    <script>
        window.onload = function(event) {
            console.log('window onload');
            console.log(event);
            alert('打开页面?');

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

可以看到,每个监听事件都可以传入一个 event的事件参数, 通过event我们可以判断是哪种事件类型,也可以从里面获得一些有用的信息, 比如我们的键盘事件,输入的键盘字母等