一、事件注册方式




1、删除传统方式注册事件


传统方式 注册事件 , 可以 直接在 HTML 标签里写 onclick 等属性 ,

<button id="btn1" onclick="alert('hello!')">按钮1</button>

也可以在 JavaScript 脚本中 , 获取元素对象 , 为元素对象的 " on + 事件名称 " 成员设置一个函数 ;

        var btn1 = document.getElementById('btn1');

        // 1. 传统方式注册事件
        btn1.onclick = function() {
            alert('hello1!');
        }

要删除这种事件 , 只需将对应的 DOM 元素的 onxxx 属性设置为 null 即可 ;

btn1.onclick = null;

这种方式将 事件处理程序 直接赋值给了 元素的一个属性 , 当你把它设置为 null , 就相当于移除了这个属性的值 , 事件自然就失效了 ;


2、删除方法监听方式注册事件


方法监听方式注册事件 是通过调用 DOM 元素的 element.addEventListener(eventName, functionName[, useCapture]); 函数 注册的事件 , 最现代、最推荐的事件注册方式 , 因为它允许为同一个事件注册多个处理程序 , 如下面的代码所示 :

        var btn2 = document.getElementById('btn2');

        // 2. 事件侦听注册事件
        function fun() {
            alert('hello2!');
        }
        btn2.addEventListener('click', fun);

要删除这种方式注册的事件 , 必须使用 removeEventListener 方法 , 并提供与注册时完全相同的参数 :

  • 事件类型 :click , 不能有 on 前缀 ;
  • 处理函数 : 这里要求事件函数 , 不能是 匿名函数 , 因为 匿名函数 都是一次性的 ;
  • 可选参数 : 捕获 / 冒泡阶段 , 如果注册事件阶段指定了该参数 , 则删除事件时也必须指定该参数 ;

要移除上面 DOM 元素注册的事件 , 可以通过调用下面的代码实现 ;

btn2.removeEventListener('click', fun);




二、完整代码示例




1、代码示例


<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>事件注册</title>
    <style></style>
</head>

<body>
    <div>
        <button id="btn1">按钮1 传统方式注册事件</button>
        <button id="btn2">按钮2 事件监听方式注册事件</button>
    </div>
    <div>
        <button id="btn3">移除 按钮1 点击事件</button>
        <button id="btn4">移除 按钮2 点击事件</button>
    </div>
    <script>
        var btn1 = document.getElementById('btn1');
        var btn2 = document.getElementById('btn2');

        // 1. 传统方式注册事件
        btn1.onclick = function() {
            alert('hello1!');
        }

        // 2. 事件侦听注册事件
        function fun() {
            alert('hello2!');
        }
        btn2.addEventListener('click', fun);


        var btn3 = document.getElementById('btn3');
        var btn4 = document.getElementById('btn4');

        // 3. 移除 传统方式注册事件
        btn3.addEventListener('click', function() {
            btn1.onclick = null;
            alert('移除 按钮1 事件成功!');
        })

        // 4. 移除 事件监听方式注册事
        btn4.addEventListener('click', function() {
            btn2.removeEventListener('click', fun);
            alert('移除 按钮2 事件成功!');
        })
    </script>
</body>

</html>

2、执行结果


进入页面后 , 按钮1 和 按钮2 都有注册事件 ;

点击 " 移除 按钮1 点击事件 " 按钮后 , 按钮 1 事件被移除 , 再次点击 按钮 1 没有事件响应 ;

点击 " 移除 按钮2 点击事件 " 按钮后 , 按钮 2 事件被移除 , 再次点击 按钮 2 没有事件响应 ;

在这里插入图片描述

完整执行效果 :

在这里插入图片描述

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐