首页 > 其他分享 >系统中正在发生的“事件”——WEB开发系列51

系统中正在发生的“事件”——WEB开发系列51

时间:2024-10-22 12:49:43浏览次数:3  
标签:WEB 系列 JavaScript 51 事件 监听器 addEventListener click 处理器

事件是在你编写的程序中发生的特定行为,系统会传递这些事件的信息,以便你的代码能够做出相应的反应。举个例子,当用户在网页上点击一个按钮时,你可能希望通过弹出一个信息框来回应这一操作。


什么是事件?

事件是在编写的程序中产生的特定情况。当这些事件出现时,系统会发出信号,并提供一种机制,允许你自动执行某些操作(比如运行代码)。这些事件通常是在浏览器窗口内触发的,关联到其中的特定元素。这可以是单个元素、一组元素、当前加载的HTML文档,或整个浏览器窗口。各种类型的事件都有可能发生。

例如:

  • 用户选择、点击或将光标悬停在某个元素上。
  • 用户按下键盘上的某个键。
  • 用户调整浏览器窗口的大小或关闭它。
  • 网页完成加载。
  • 表单被提交。
  • 视频播放、暂停或结束。
  • 发生错误。

​要对某个事件做出反应,为其添加一个事件处理器。这通常是你作为程序员编写的 JavaScript 函数,它会在事件发生时被执行。当你定义了一个代码块来响应该事件时,我们称之为注册事件处理器。需要注意的是,事件处理器有时也被称作事件监听器——这两个术语在我们的讨论中可以视为同义词。尽管从严格意义上讲,这段代码既监控又处理事件,但监听器主要关注事件的发生,而处理器则负责对事件采取相应的行动。

处理点击事件

假设用户在网页上单击一个按钮,我们希望在用户单击时显示一条消息。这就是一个典型的事件处理示例。下面是一个简单的代码示例:

<!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>
    <button id="myButton">点击我!</button>
    <script>
        const button = document.getElementById('myButton');
        button.onclick = function() {
            alert('按钮被点击了!');
        };
    </script>
</body>
</html>

​onclick​​事件处理器在用户单击按钮时被触发,随后通过 ​​alert()​​​ 函数显示一条消息。这是事件处理的基本形式。


使用 ​​addEventListener()​

​addEventListener()​​​ 方法是现代 JavaScript 中注册事件处理器的推荐方式。它允许我们添加多个事件监听器,并在需要时方便地移除这些监听器。

添加事件监听器

使用 ​​addEventListener()​​方法来添加事件监听器,可以接受三个参数:

  • 事件类型(字符串,例如 ​​'click'​​)。
  • 事件处理函数。
  • 可选的配置对象(布尔值或对象)。
button.addEventListener('click', function() {
    alert('按钮被点击了!');
});

监听其他事件

除了 ​​click​​ 事件,​​addEventListener()​​ 还能处理多种类型的事件,例如:

  • ​input​​:当用户输入内容时触发。
  • ​mouseover​​:当鼠标悬停在元素上时触发。
  • ​keydown​​:当按下键盘键时触发。
<input id="myInput" type="text" placeholder="输入一些文本..." />
<script>
    const input = document.getElementById('myInput');
    input.addEventListener('input', function() {
        console.log('当前输入的内容:', this.value);
    });
</script>

移除监听器

可以使用 ​​removeEventListener()​​​ 方法移除之前添加的监听器。需要确保传递的处理函数与添加时完全相同。

function handleClick() {
    alert('按钮被点击了!');
}
button.addEventListener('click', handleClick);

// 在需要时可以移除监听器
button.removeEventListener('click', handleClick);

在单个事件上添加多个监听器

​addEventListener()​​​ 允许为相同的事件类型注册多个处理程序,这样就可以实现各自独立的行为。

button.addEventListener('click', function() {
    alert('第一次处理!');
});
button.addEventListener('click', function() {
    alert('第二次处理!');
});

这个例子中,单击按钮将依次触发两个不同的事件处理程序。


其他事件监听器机制

事件处理器属性

除了 ​​addEventListener()​​ 和 ​​removeEventListener()​​ 方法外,HTML 元素还可以使用事件处理器属性。这种方法虽然有效,但并不推荐使用,它会使代码的结构较为混乱。

<button id="myButton" onclick="alert('按钮被点击了!')">点击我!</button>

内联事件处理器——不要使用

虽然在HTML中使用内联事件处理器很方便,但这不是一个好习惯。它减少了代码的可维护性,增加了耦合度。建议使用 ​​addEventListener()​​。


事件对象

当事件发生时,JavaScript会生成一个事件对象,包含有关事件的详细信息。在事件处理程序中,可以通过参数访问此对象。

事件对象的额外属性

以下是一些常用的事件对象属性:

  • ​target​​:事件的目标元素。
  • ​type​​:事件的类型(例如 ​​click​​)。
  • ​preventDefault()​​:阻止默认事件发生,如在表单提交时防止页面刷新。
  • ​stopPropagation()​​​:停止事件冒泡。
button.addEventListener('click', function(event) {
    event.preventDefault(); // 阻止默认行为
    console.log('事件类型:', event.type);
    console.log('事件目标:', event.target);
});

阻止默认行为

在某些情况下,您可能希望阻止浏览器执行事件的默认行为。例如,提交一个表单时,默认行为是刷新页面。可以通过调用 ​​event.preventDefault()​​​ 实现。

<form id="myForm">
    <input type="text" placeholder="输入文本" />
    <button type="submit">提交</button>
</form>
<script>
    const form = document.getElementById('myForm');
    form.addEventListener('submit', function(event) {
        event.preventDefault(); // 阻止表单的默认提交
        alert('表单提交被阻止!');
    });
</script>

事件并不独占于网页

事件并不是 JavaScript 独有的,大多数编程语言都有自己的事件模型,而这些模型的实现方式常常各不相同。实际上,网页中使用的 JavaScript 事件模型与其他环境下的 JavaScript 事件模型也存在差异。

例如,Node.js 是一个广受欢迎的 JavaScript 运行时,允许开发者使用 JavaScript 构建网络和服务器端应用程序。在 Node.js 中,事件模型依赖于监听器来监控事件,而发射器则用来定期触发事件。虽然听起来没有什么不同,但在代码实现上却大相径庭,比如使用 ​​on()​​ 函数注册事件监听器,而 ​​once()​​ 则用于注册一个一次性的事件监听器,该监听器运行一次后会自动注销。HTTP 连接事件文档就是一个很好的例子。

另外,你还可以通过一种名为 WebExtensions 的技术来编写 JavaScript,以创建跨浏览器的扩展功能。这种事件模型与网页中的事件模型类似,但有所不同——事件监听器的属性采用驼峰命名法(例如 ​​onMessage​​ 而不是 ​​onmessage​​),并且需要与 ​​addListener​​​ 函数结合使用。

其他语言的事件模型

  1. Java:Java Swing 和 JavaFX 提供事件处理基本机制,用监听器在 UI 组件上处理事件。
  2. Python:像 Tkinter 和 PyQt 框架也实现了事件驱动的编程范式,允许定义和处理事件。
  3. C#:使用 .NET 的事件模型,允许定义事件并在某些条件下触发相应的事件处理程序。

如有表述欠缺之处还请各位佬指正。

标签:WEB,系列,JavaScript,51,事件,监听器,addEventListener,click,处理器
From: https://blog.csdn.net/LEECOO666/article/details/143151547

相关文章

  • 在Ubuntu小设备上使用VSCode+SSH开发部署nicegui的Web应用,并设置系统开机自动启动应用
    在一些小的设备上跑Ubuntu系统,需要快速的开发和调整项目的时候,往往使用SSH进行远程的开发测试,这样可以避免传统的打包更新处理,能够快速的在实际环境上测试具体的内容。另外由于系统设备往往需要重启后能够保留应用的工作,因此也需要在Ubuntu系统设置自动启动的服务处理。本篇随笔介......
  • 第二十九篇:图解TCP三次握手,看过不会忘,从底层说清楚,TCP系列四
    ⼀开始,客户端和服务端都处于CLOSED状态。先是服务端主动监听某个端⼝,处于LISTEN状态。接下来这部分内容的介绍将影响你能不能彻底理解了TCP的三次握手。一、划重点:只有服务端启动了端口监听,客户端TCP握手才能建立连接,那么服务端启动的时候都做了哪些工作呢?1.服务端创......
  • java脚手架系列9-统一权限认证gateway
    之所以想写这一系列,是因为之前工作过程中有几次项目是从零开始搭建的,而且项目涉及的内容还不少。在这过程中,遇到了很多棘手的非业务问题,在不断实践过程中慢慢积累出一些基本的实践经验,认为这些与业务无关的基本的实践经验其实可以复刻到其它项目上,在行业内可能称为脚手架,因......
  • 第三十篇:TCP连接断开过程,从底层说明白,TCP系列五
    上一篇《》说了TCP的三次握手,接下来我将讲解TCP四次挥手。既然有连接就有断开,谈到这里,有的同学可能会想,不就是TCP的断开吗?简单,四次挥手解决问题,只要了解了四次的挥手过程就掌握了TCP的断开,我只能说:同学,tooyoung,toosimple;且让我提出几个问题去思考:连接断开是谁先发起的?如果......
  • actix-web连接mysql并返回json
    toml[dependencies]actix-web="4"mysql="25.0.0"chrono="0.4"serde={version="1.0",features=["derive"]}rsuseactix_web::{get,post,web,App,HttpServer,Responder,HttpResponse,Error};......
  • 【可答疑】基于51单片机的智能小区安防系统(含仿真、代码、报告、演示视频等)
     ✨哈喽大家好,这里是@每天一杯冰美式oh,985电子本硕,大厂嵌入式在职0.3年,业余时间做做单片机小项目,有需要也可以提供就业指导(免费)~......
  • 77.优美的鲜花网店网页 ​Web前端网页制作 大学生期末大作业 html+css+js
    目录一、前言二、网页文件三、网页效果四、代码展示1.HTML2.CSS3.JS五、更多推荐一、前言本实例以鲜花为主题设计,应用html+css+js,包括DIV布局、图片轮翻效果、菜单导航、二级三级菜单、留言板、搜索等,供大家参考。本网页支持如Dreamweaver、HBuilder、Text、Vscode......
  • 2024Ciscn总决赛Web Writeup
    前言鸽了三个月的复现计划:)ezjs考点是express引擎解析的一个trick,在高版本的express已经修复,先贴源码constexpress=require('express');constejs=require('ejs')constsession=require('express-session');constbodyParse=require('body-parser');co......
  • ctfshow-web入门-信息搜集(14)
    1.根据提示:有时候源码里面就能不经意间泄露重要(editor)的信息,默认配置害死人2.我们直接在url后面添加/editor,在flash上传空间里面找到文件空间,爆出了一堆目录3.最终我们在var/www/html/nothinghere/fl000g.txt这个路径找的到了flag,我们在url后面添加nothinghere/fl000g.......
  • JavaWeb:实验二JSP表单开发及访问数据库
    实现注册与登录功能:1.创建一个数据库,在数据库建立用户表。2.制作一个注册表单,可以输入账户和密码并提交(在数据提交之前用JS对表单数据进行有效性验证),将表单提交的数据写入数据库。3.制作一个登录表单,输入账号和密码,通过数据库进行验证,如果账号、密码验证通过,则显示“登录成功”......