探究JavaScript中的五种事件处理程序方式

yizhihongxing

让我们来探究JavaScript中的五种事件处理程序方式:

事件处理程序方式

在JavaScript中,有五种主要的事件处理程序方式:

  1. HTML事件处理程序
  2. DOM0级事件处理程序
  3. DOM2级事件处理程序
  4. DOM3级事件处理程序
  5. EventUtil事件处理程序

下面我们将会详细讲解这五种事件处理程序方式的用法和区别。

1. HTML事件处理程序

HTML事件处理程序是指直接在HTML标签中通过指定事件属性来处理事件的方式。例如:

<button onclick="alert('clicked')">Click me</button>

这里,我们在<button>标签中指定了onclick属性,当用户点击该按钮时,alert('clicked')函数会被执行。

HTML事件处理程序的优点是简单直接,可以快速完成功能的实现。但它也存在以下缺点:

  • HTML和JavaScript代码紧密耦合,不易于维护和重用;
  • 如果存在大量的HTML事件处理程序,会导致HTML代码臃肿不易读;
  • HTML事件处理程序只能绑定一个函数,如果需要绑定多个函数,就需要在HTML代码中书写多个事件属性,不利于代码的整洁和可读性。

2. DOM0级事件处理程序

DOM0级事件处理程序是指直接将事件处理程序赋值给DOM节点属性的方式。例如:

var button = document.querySelector('button');
button.onclick = function() {
  alert('clicked');
};

这里,我们选择了一个<button>元素,然后将onclick属性赋值为一个匿名函数,当用户点击该按钮时,alert('clicked')函数会被执行。

DOM0级事件处理程序的优点是简单易懂、兼容性好,可以用来处理简单的事件。但它也存在以下缺点:

  • DOM节点只能绑定一个事件处理程序,如果需要绑定多个处理程序,就会相互覆盖;
  • 当要删除某个事件处理程序时,必须将该处理程序设置为null,否则无法删除。

3. DOM2级事件处理程序

DOM2级事件处理程序是指通过addEventListenerattachEvent方法来为DOM节点添加事件处理程序的方式。例如:

var button = document.querySelector('button');
button.addEventListener('click', function() {
  alert('clicked');
}, false);

这里,我们选择了一个<button>元素,然后通过addEventListener方法,向它添加了一个事件监听器,当用户点击该按钮时,alert('clicked')函数会被执行。第三个参数false表示在事件捕获阶段处理事件。

attachEvent方法是addEventListener方法在IE中的替代品,用法类似。但需要注意的是,IE浏览器中使用attachEvent时,事件处理程序中的this指向的是window对象,需要通过callapply方法来手动指定this指向DOM节点。

DOM2级事件处理程序的优点是支持DOM节点的多个事件处理程序,不会覆盖已存在的事件处理程序;支持事件捕获和冒泡;可以通过removeEventListenerdetachEvent来删除事件处理程序。缺点是在IE浏览器中需要使用attachEvent方法。

4. DOM3级事件处理程序

DOM3级事件处理程序是指通过addEventListener方法的第三个参数来指定事件的处理方式的方式。例如:

var button = document.querySelector('button');
button.addEventListener('click', function() {
  alert('clicked');
}, {
  capture: false,
  once: false,
  passive: false,
});

这里,我们选择了一个<button>元素,然后通过addEventListener方法,向它添加了一个多属性事件监听器,当用户点击该按钮时,alert('clicked')函数会被执行。第三个参数包含三个属性:capture表示是否在事件捕获阶段处理事件;once表示是否仅处理一次事件,处理后自动删除事件处理程序;passive表示是否允许在该事件处理程序中调用preventDefault方法。

DOM3级事件处理程序在DOM2级事件处理程序的基础上增加了多种事件处理方式,适应了更多的开发需求。

5. EventUtil事件处理程序

EventUtil事件处理程序是指使用一个独立的事件处理程序库来封装DOM事件处理程序的方式。例如:

var button = document.querySelector('button');
EventUtil.addHandler(button, 'click', function() {
  alert('clicked');
});

这里,我们通过EventUtil.addHandler方法来添加事件处理程序,当用户点击该按钮时,alert('clicked')函数会被执行。

EventUtil事件处理程序的优点是封装了DOM事件处理程序的各种陷阱和不兼容问题,使得事件处理程序的编写更加简单方便。缺点是需要引入第三方库,增加了代码的依赖性。

示例说明

下面我们来使用两个示例来说明这五种事件处理程序方式的区别:

示例1:点击按钮修改其文本

首先,我们创建一个按钮,并为其添加一个事件处理程序。当用户点击该按钮时,按钮的文本就会被修改为"Clicked!"。

HTML事件处理程序

<button onclick="this.innerText='Clicked!'">Click me</button>

DOM0级事件处理程序

var button = document.querySelector('button');
button.onclick = function() {
  this.innerText = 'Clicked!';
};

DOM2级事件处理程序

var button = document.querySelector('button');
button.addEventListener('click', function() {
  this.innerText = 'Clicked!';
}, false);

DOM3级事件处理程序

var button = document.querySelector('button');
button.addEventListener('click', function() {
  this.innerText = 'Clicked!';
}, {
  capture: false,
  once: false,
  passive: false,
});

EventUtil事件处理程序

var button = document.querySelector('button');
EventUtil.addHandler(button, 'click', function() {
  button.innerText = 'Clicked!';
});

示例2:为多个按钮添加点击事件

我们现在创建了三个按钮,并为它们添加了一个点击事件处理程序。当用户点击按钮时,会在控制台中输出按钮的文本。

HTML事件处理程序

<button onclick="console.log(this.innerText)">Button1</button>
<button onclick="console.log(this.innerText)">Button2</button>
<button onclick="console.log(this.innerText)">Button3</button>

DOM0级事件处理程序

var buttons = document.querySelectorAll('button');
for (var i = 0; i < buttons.length; i++) {
  buttons[i].onclick = function() {
    console.log(this.innerText);
  };
}

DOM2级事件处理程序

var buttons = document.querySelectorAll('button');
for (var i = 0; i < buttons.length; i++) {
  buttons[i].addEventListener('click', function() {
    console.log(this.innerText);
  }, false);
}

DOM3级事件处理程序

var buttons = document.querySelectorAll('button');
for (var i = 0; i < buttons.length; i++) {
  buttons[i].addEventListener('click', function() {
    console.log(this.innerText);
  }, {
    capture: false,
    once: false,
    passive: false,
  });
}

EventUtil事件处理程序

var buttons = document.querySelectorAll('button');
for (var i = 0; i < buttons.length; i++) {
  EventUtil.addHandler(buttons[i], 'click', function() {
    console.log(this.innerText);
  });
}

从上面两个示例中可以看出,五种事件处理程序方式具有各自的特点和适用场景,我们需要根据实际需求进行选择。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:探究JavaScript中的五种事件处理程序方式 - Python技术站

(0)
上一篇 2023年5月18日
下一篇 2023年5月18日

相关文章

  • Js动态创建div

    下面是关于JavaScript动态创建div的完整攻略。 一、什么是动态创建div 动态创建div是指使用JavaScript代码在页面中动态生成div元素。通常,我们可以使用静态页面构建工具,如HTML、CSS等,来实现页面布局和内容呈现。但某些特定的场景,需要动态生成div元素,来实现一些动态效果或者数据展示等功能。 二、如何使用JavaScript动态…

    JavaScript 2023年6月11日
    00
  • JS实现定时任务每隔N秒请求后台setInterval定时和ajax请求问题

    要实现定时任务可以使用JavaScript中的setInterval函数来每隔一定的时间执行特定的代码。在这个过程中需要注意一些细节,如何在setInterval中执行ajax请求等问题,以下是具体的攻略: 使用setInterval实现定时任务 在JavaScript中可以使用setInterval函数来实现定时任务,setInterval函数接收两个参数…

    JavaScript 2023年6月11日
    00
  • 详解如何优雅迭代JavaScript字面对象

    下面我将详细讲解如何优雅迭代JavaScript字面对象。 什么是字面对象? 字面对象是JS中一种非常常见的数据类型。它就像一个存储键值对的容器,用于表示一个对象或者一个数组等数据结构。比如下面这个字面对象: const person = { name: "张三", age: 20, sex: "男", address…

    JavaScript 2023年5月27日
    00
  • JS函数式编程之纯函数、柯里化以及组合函数

    函数式编程是一种以函数为中心的编程范式。在JavaScript中,函数式编程被越来越广泛地使用。本文将介绍函数式编程中的三个重要概念:纯函数、柯里化和组合函数。 纯函数 纯函数是指满足以下条件的函数: 给定相同的输入,总是返回相同的输出。 不产生副作用,即不会影响到函数外部的状态,如修改全局变量或参数。 纯函数的优点在于: 可以简化代码的测试和调试,因为纯函…

    JavaScript 2023年5月27日
    00
  • js对字符串进行编码的方法总结(推荐)

    JS对字符串进行编码的方法总结 在Web开发中,我们经常需要对URL、HTML等不同类型的数据进行编码,以防止不必要的转义或注入攻击。JavaScript提供了多种方法对字符串进行编码,本文将对这些方法进行总结。 1. encodeURIComponent()方法 encodeURIComponent() 方法可把字符串作为 URI 组件进行编码。该方法会对…

    JavaScript 2023年5月20日
    00
  • javascript实现抽奖程序的简单实例

    让我详细讲解一下“javascript实现抽奖程序的简单实例”的攻略。 确定功能和需求 在开发抽奖程序之前,我们需要确认程序的功能和需求。根据通常的抽奖程序,我们需要确定以下的功能和需求: 可以设置抽奖人员名单 可以设置中奖人数 可以执行抽奖操作,随机选取中奖人员 可以重置程序,清空上次的中奖名单 HTML结构的构建 在确定功能和需求之后,我们需要构建HTM…

    JavaScript 2023年5月27日
    00
  • JavaScript在form表单中使用button按钮实现submit提交方法

    JavaScript是一种高级的编程语言,广泛用于web开发。在form表单中,我们可以使用button按钮实现提交方法。这里,我将向你介绍如何使用JavaScript来实现这个过程的完整攻略。 步骤一:创建form表单 首先,我们需要创建一个form表单。具体代码如下所示: <form id="myForm" action=&qu…

    JavaScript 2023年6月10日
    00
  • 掌握AJAX第2/7页

    掌握AJAX第2/7页的完整攻略 简介 AJAX(异步的JavaScript和XML)是一种用于创建动态网页的技术。它的主要优点是不用重新加载整个页面就可以与服务器进行交互。这种技术使得Web应用程序更快速、更灵活,并增强了用户体验。在本攻略中,我们将着重介绍AJAX的相关概念和使用方法。 了解AJAX AJAX是一种用于创建动态网页的重要技术。它的主要原理…

    JavaScript 2023年6月1日
    00
合作推广
合作推广
分享本页
返回顶部