Javascript中DOM事件监听 (鼠标事件,键盘事件,表单事件)

#DOM(Document Object Model)事件监听是一种机制,它允许 JavaScript 代码在 HTML 文档中的元素上监听特定的事件。当这些事件发生时,与之关联的 JavaScript 函数(也称为事件处理函数)就会被执行。这使得网页能够对用户的交互行为做出响应,如点击按钮、按下键盘按键、提交表单等。#

一、监听鼠标事件

1.简介

  • 当按下鼠标按键(左、右键均可)触发事件的发生。
属性关系

mousedown

按下鼠标键时触发

mouseup

抬起鼠标键时触发

click

单击鼠标时触发

dblclick

在同一个元素上双击鼠标时触发

mouseenter

鼠标进入一个节点时触发,进入子节点不会触发这个事件

mouseleave

鼠标离开一个节点时触发,离开父节点不会触发这个事件

wheel

在浏览器窗口滚动鼠标滚轮时触发

2、mousedown 事件

  • 这是最常见的鼠标事件之一。当用户在一个元素上按下并释放鼠标左键时触发。
<!DOCTYPE html>
<html lang="zh">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>鼠标事件</title><style>.box{width:  60px;height: 30px;background-color: aliceblue;border: 2px solid black;text-align: center;}</style>
</head>
<body><div class="box" id="b1">事件</div><script>box = document.getElementById("b1");box.addEventListener( "click",function(){console.log("鼠标单击事件已触发");});</script>
</body>
</html>

代码运行后如下:                                                                                                                                

 3.mousedown 和 mouseup 事件

  • 当用户在一个元素上抬起和点击时鼠标左键时触发。
<!DOCTYPE html>
<html lang="zh">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>鼠标事件</title><style>.box{width:  60px;height: 30px;background-color: aliceblue;border: 2px solid black;text-align: center;}</style>
</head>
<body><div class="box" id="b1">事件</div><script>box.addEventListener( "mousedown",function(){console.log("鼠标按下事件已触发");});box.addEventListener( "mouseup",function(){console.log("鼠标抬起事件已触发");});</script>
</body>
</html>

代码运行后如下:

 4.dblclick 事件

  • 当用户在一个元素上快速连续地两次点击鼠标左键时触发。
<!DOCTYPE html>
<html lang="zh">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>鼠标事件</title><style>.box{width:  60px;height: 30px;background-color: aliceblue;border: 2px solid black;text-align: center;}</style>
</head>
<body><div class="box" id="b1">事件</div><script>box.addEventListener( "dblclick",function(){console.log("鼠标双击事件已触发");});</script>
</body>
</html>

代码运行后如下:

 

5.mouseenter 和 mouseleave 事件 

  • mouseover事件在鼠标指针进入一个元素时触发,mouseout事件在鼠标指针离开一个元素时触发。 

 

<!DOCTYPE html>
<html lang="zh">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>鼠标事件</title><style>.box{width:  60px;height: 30px;background-color: aliceblue;border: 2px solid black;text-align: center;}</style>
</head>
<body><div class="box" id="b1">事件</div><script>box.addEventListener( "mouseenter",function(){console.log("鼠标进入节点事件已触发");});box.addEventListener( "mouseleave",function(){console.log("鼠标离开节点事件已触发");});</script>
</body>
</html>

代码运行后如下:

 

6. wheel 事件

  • 在浏览器中滑动触发事件
<!DOCTYPE html>
<html lang="zh">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>鼠标事件</title><style>body {  height: 3000px; /* 增加浏览器页面高度以便滚动 */  }</style>
</head>
<body><script>box = document.getElementById("b1");// 窗口监听鼠标滚动window.addEventListener( "wheel",function(){console.log("鼠标滚动事件已触发");});</script></script>
</body>
</html>

代码运行后如下:

 

二、监听键盘事件

1、keydown事件

  • keydown事件在用户按下键盘上的一个键时触发,可以用于实现一些快捷键功能等。例如,在整个文档级别监听键盘事件:
<!DOCTYPE html>
<html lang="zh">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>键盘事件</title><style>#output {  margin-top: 20px;  padding: 10px;  border: 1px solid #ccc;  width: 300px;  height: 100px;  overflow-y: scroll;/* 保持空白符和换行符 */ white-space: pre-wrap; }  </style>  
</head>  
<body>  <div id="output"></div>  <script>  // 获取显示按键信息的元素  const outputDiv = document.getElementById('output');  // 监听整个文档的keydown事件  document.addEventListener( 'keydown',function(event) {  console.log(`键盘 ${event.key}  被按下`)});  </script>  
</body>  
</html>

代码运行后如下:

 

 2、keyup事件

  • keyup事件在用户释放键盘上的一个键时触发。可以用于实现一些快捷键功能等。
<!DOCTYPE html>
<html lang="zh">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>键盘事件</title><style>#output {  margin-top: 20px;  padding: 10px;  border: 1px solid #ccc;  width: 300px;  height: 100px;  overflow-y: scroll;/* 保持空白符和换行符 */ white-space: pre-wrap; }  </style>  
</head>  
<body>  <div id="output"></div>  <script>  // 获取显示按键信息的元素  const outputDiv = document.getElementById('output');  // 监听整个文档的keyup事件  document.addEventListener( 'keyup',function(event) {  console.log(`键盘 ${event.key}  被按下`)});  </script>  
</body>  
</html>

代码运行后如下:

 

3、keycode事件

获取按键的代码(包括数字键和特殊键,如箭头键、功能键等),将按键信息添加到输出区域  。

<!DOCTYPE html>
<html lang="zh">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>键盘事件</title><style>#output {  margin-top: 20px;  padding: 10px;  border: 1px solid #ccc;  width: 300px;  height: 100px;  overflow-y: scroll;/* 保持空白符和换行符 */ white-space: pre-wrap; }  </style>  
</head>  
<body>  <div id="output"></div>  <script>  // 获取显示按键信息的元素  const outputDiv = document.getElementById('output');  // 监听整个文档的keyup事件  document.addEventListener( 'keydown',function(event) {  console.log(`键盘 ${event.key}  被抬起`)// 获取按键的代码(包括数字键和特殊键,如箭头键、功能键等)   const keyCode = event.key; // 将按键信息添加到输出区域  const message = `键盘 ${keyCode}  被按下`; outputDiv.textContent += message + '\n';  </script>  
</body>  
</html>

 代码运行后如下:

4、解决自动滚动到输出区域

  •  clientHeight 获取元素高度包括 padding 部分,但是不包括 border/margin
  • clientWidth 获取元素宽度包括 padding 部分,但是不包括 border/margin
  • scrollHeight 元素总高度,它包括 padding ,但是不包括 border/margin,  包括溢出的不可见内容
  • scrollWidth 元素总宽度,它包括 padding ,但是不包括 border/margin ,  包括溢出的不可见内容
  • scrollLeft 元素的水平滚动条向右滚动的像素数量
  • scrollTop 元素的垂直滚动条向下滚动的像素数量
  • outputDiv.scrollTop = outputDiv.scrollHeight;  

三、监听表单事件

  •  form对象(称表单对象或窗体对象)是document对象的子对象,提供一个让客户端输入文字或选择的功能。通过form对象可以访问表单对象的属性及方法

1、建立一个简单的表单 

<!DOCTYPE html>  
<html lang="zh">  
<head>  <meta charset="UTF-8">  <meta name="viewport" content="width=device-width, initial-scale=1.0">  <title>表单事件</title>  
</head>  
<body>  <!-- 简单的HTML表单 -->  <form id="myForm">  姓名: <input type="text" id="name" value="在此处输入你的姓名">  <br>  邮箱: <input type="email" id="email" value="在此处输入你的邮箱">  <br>  <input type="submit" value="提交"><input type="reset" value="重置"></form>  <script></script>  
</body>  
</html>

2、获取表单元素  

 const form = document.getElementById('myForm');  

3、添加“表单提交”事件监听器

    <script>  // 获取表单元素  const form = document.getElementById('myForm');  // 添加“表单提交”事件监听器  form.addEventListener('submit', function(event) {  // 阻止表单的“默认提交行为”  (即:将数据发送到表单的 action 属性指定的 URL,并在那里进行处理))// 然而,在前端开发中,经常会有这样的需求:在表单提交之前进行一些客户端验证// 在这些情况下,你需要阻止表单的默认提交行为。// 比如: 你可以在提交表单之前检查用户输入的数据是否有效(如检查必填字段是否已填写,// 电子邮件地址格式是否正确等)。如果数据无效,你可以显示错误消息而不提交表单event.preventDefault();  // 弹出警告框(在实际应用中,你可能会在这里进行AJAX请求或其他处理) alert('表单提交按钮被按下! (但默认提交行为被截止了)');  // 你可以在这里添加其他代码来处理表单数据  // 例如,获取输入值:  const name = document.getElementById('name').value;  const email = document.getElementById('email').value;  console.log('Name:', name);  console.log('Email:', email);  }); </script>  
</body>  
</html>

代码运行后如下:

4、添加表单重置事件监听器   

        form.addEventListener('reset', function(event) {  // 弹出警告框alert('表单已经重置! ');  });

 代码运行后如下:

5、设置文本范围 

(1)、获取文本输入框元素

const inputElement = document.getElementById('name'); 

(2)、添加 select 事件监听器  

   inputElement.addEventListener('select', function(event) { });

(3)、输出选择的文本范围(起始位置和结束位置)

        inputElement.addEventListener('select', function(event) {  // 输出选择的文本范围(起始位置和结束位置) Event.target属性返回事件当前所在的节点 console.log('选中的文本范围:', event.target.selectionStart, event.target.selectionEnd);  });

(4)、获取并输出实际选中的文本

        inputElement.addEventListener('select', function(event) {  // 输出选择的文本范围(起始位置和结束位置) Event.target属性返回事件当前所在的节点 console.log('选中的文本范围:', event.target.selectionStart, event.target.selectionEnd);  // 你也可以获取并输出实际选中的文本,但需要注意浏览器兼容性  // 以下代码在大多数现代浏览器中有效,但在某些旧版浏览器中可能不适用  // 注意: selectionEnd 属性返回的是选择范围的结束位置的下一个字符的索引const selectedText = inputElement.value.substring(event.target.selectionStart, event.target.selectionEnd);  console.log('已选中文本:', selectedText);  });

(5)、输出一条消息来表示事件已被触发

        inputElement.addEventListener('select', function(event) {  // 输出选择的文本范围(起始位置和结束位置) Event.target属性返回事件当前所在的节点 console.log('选中的文本范围:', event.target.selectionStart, event.target.selectionEnd);  // 你也可以获取并输出实际选中的文本,但需要注意浏览器兼容性  // 以下代码在大多数现代浏览器中有效,但在某些旧版浏览器中可能不适用  // 注意: selectionEnd 属性返回的是选择范围的结束位置的下一个字符的索引const selectedText = inputElement.value.substring(event.target.selectionStart, event.target.selectionEnd);  console.log('已选中文本:', selectedText);  // 对于更简单的用途,你可能只想输出一条消息来表示事件已被触发  alert('输入框中的文本被选中了!!!');  });

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/482426.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

TiDB 无统计信息时执行计划如何生成

作者&#xff1a; weiyinghua 原文来源&#xff1a; https://tidb.net/blog/4c49ac0d 一、Pseudo 统计信息总体生成规则 TiDB 在表无统计信息时&#xff0c;不会进行动态采样&#xff0c;而是用静态的、预设规则以及经验假设来生成计划。用函数 PseudoTable 创建一个伪统…

服务器密码错误被锁定怎么解决?

当服务器密码错误多次导致账号被锁定时&#xff0c;解决方法需要根据服务器的操作系统&#xff08;如 Linux 或 Windows &#xff09;和具体服务器环境来处理。以下是常见的解决办法&#xff1a; 一、Linux 服务器被锁定的解决方法 1. 使用其他用户账号登录 如果有其他未被…

认识redis 及 Ubuntu安装redis

文章目录 一. redis概念二. redis应用场景二. redis的特性四. 使用Ubuntu安装redis 一. redis概念 redis 是在内存中存储数据的中间件, 用在分布式系统 redis是客户端服务器结构的程序, 客户端服务器之间通过网络来通信 二. redis应用场景 redis可用作数据库 类似MySQL, 但…

LabVIEW内燃机气道试验台测控系统

基于LabVIEW软件开发的内燃机气道试验台测控系统主要应用于内燃机气道的性能测试和数据分析&#xff0c;通过高精度的测控技术&#xff0c;有效提升内燃机的测试精度和数据处理能力。 项目背景 随着内燃机技术的发展&#xff0c;对其气道性能的精准测量需求日益增加。该系统通…

Rust vs Java:后端开发应该选哪个?

后端技术的发展迅速。根据JetBrains 2024年开发者调查,尽管Java仍然占据约34.5%的市场份额,但Rust在高性能应用中的应用逐渐增多。过去四年中,Rust在企业中的采用增长了240%(根据Stack Overflow 2024开发者调查)。随着组织更加注重效率和可扩展性,选择Rust还是Java已成为…

触觉智能亮相OpenHarmony人才生态大会2024

11月27日&#xff0c;OpenHarmony人才生态大会2024在武汉隆重举行。本次大会汇聚了政府领导、学术大咖、操作系统技术专家、高校及企业代表&#xff0c;围绕新时代背景下的操作系统人才培养进行了深入探讨&#xff0c;分享高校、企业在产学研融合方面的先进经验&#xff0c;全面…

springboot366高校物品捐赠管理系统(论文+源码)_kaic

毕 业 设 计&#xff08;论 文&#xff09; 高校物品捐赠管理系统设计与实现 摘 要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff…

深入理解AIGC背后的核心算法:GAN、Transformer与Diffusion Models

深入理解AIGC背后的核心算法&#xff1a;GAN、Transformer与Diffusion Models 前言 随着人工智能技术的发展&#xff0c;AIGC&#xff08;AI Generated Content&#xff0c;人工智能生成内容&#xff09;已经不再是科幻电影中的幻想&#xff0c;而成为了现实生活中的一种新兴力…

企业网站面临的爬虫攻击及安全防护策略

在当今数字化时代&#xff0c;企业网站不仅是展示企业形象的窗口&#xff0c;更是进行商业活动的重要平台。然而&#xff0c;企业网站在日常运营中面临着多种类型的爬虫攻击&#xff0c;这些攻击不仅会对网站的正常访问造成影响&#xff0c;还可能窃取敏感数据&#xff0c;给企…

STM32的CAN波特率计算

公式&#xff1a; CAN波特率 APB总线频率 / &#xff08;BRP分频器 1&#xff09;/ (SWJ BS1 BS2) SWJ一般为1。 例如STM32F407的&#xff0c;CAN1和CAN2都在在APB1下&#xff0c;频率是42000000 如果想配置成1M波特率&#xff0c;则计算公式为&#xff1a;

《操作系统 - 清华大学》6 -3:局部页面置换算法:最近最久未使用算法 (LRU, Least Recently Used)

文章目录 1. 最近最久未使用算法的工作原理2. 最近最久未使用算法示例3.LRU算法实现3.1 LRU的页面链表实现3.2 LRU的活动页面栈实现3.3 链表实现 VS 堆栈实现 1. 最近最久未使用算法的工作原理 最近最久未使用页面置换算法&#xff0c;简称 LRU&#xff0c; 算法思路&#xff…

数据集-目标检测系列- 海边漫步锻炼人检测数据集 person >> DataBall

数据集-目标检测系列- 海边漫步锻炼人检测数据集 person >> DataBall DataBall 助力快速掌握数据集的信息和使用方式&#xff0c;会员享有 百种数据集&#xff0c;持续增加中。 需要更多数据资源和技术解决方案&#xff0c;知识星球&#xff1a; “DataBall - X 数据球…

【赵渝强老师】PostgreSQL的段、区和块

PostgreSQL的逻辑存储结构主要是指数据库集群、数据库、表空间、段、区、块等&#xff1b;同时PostgreSQL的逻辑存储结构也包括数据库中的各种数据库对象&#xff0c;如&#xff1a;表、索引、视图等等。所有数据库对象都有各自的对象标识符oid&#xff08;object identifiers&…

【YOLO系列复现】二、基于YOLOv6的目标检测:YOLOv6训练自己的数据集(史诗级详细教程)

官方模型&#xff1a;YOLOv6/README_cn.md at main meituan/YOLOv6 目录 1、模型和环境准备 1.1 模型下载 1.2 依赖环境安装 1.3 权重文件下载 1.4 环境测试 2、配置文件和数据集准备 2.1 准备数据集 2.2 配置文件准备 2.3 BUG修改 3、模型训练 3.1 模型训练 3.2 …

Flink常见面试题

1、Flink 的四大特征&#xff08;基石&#xff09; 2、Flink 中都有哪些 Source&#xff0c;哪些 Sink&#xff0c;哪些算子&#xff08;方法&#xff09; 预定义Source 基于本地集合的source&#xff08;Collection-based-source&#xff09; 基于文件的source&#xff08;…

【C语言】扫雷游戏(一)

我们先设计一个简单的9*9棋盘并有10个雷的扫雷游戏。 1&#xff0c;可以用数组存放&#xff0c;如果有雷就用1表示&#xff0c;没雷就用0表示。 2&#xff0c;排查(2,5)这个坐标时&#xff0c;我们访问周围的⼀圈8个位置黄色统计周围雷的个数是1。排查(8,6)这个坐标时&#xf…

【博主推荐】C#中winfrom开发常用技术点收集

文章目录 前言1.打开文件夹并选中文件2.窗体之间传参3.异步调用&#xff1a;让数据处理不影响页面操作4.创建一个多文档界面(MDI) 应用程序5.在WinForms中使用数据绑定6.在WinForms中后台使用控件的事件处理7.在WinForms中窗体跳转的几种方式8.后台处理方法中&#xff0c;调用窗…

Matlab 绘制雷达图像完全案例和官方教程(亲测)

首先上官方教程链接 polarplothttps://ww2.mathworks.cn/help/matlab/ref/polarplot.html 上实例 % 定义角度向量和径向向量 theta linspace(0, 2*pi, 5); r1 [1, 2, 1.5, 2.5, 1]; r2 [2, 1, 2.5, 1.5, 2];% 绘制两个雷达图 polarplot(theta, r1, r-, LineWidth, 2); hold …

乌班图单机(不访问外网)部署docker和服务的方法

面向对象:Ubuntu不能访问外网的机子,部署mysql、redis、jdk8、minio 过程: 1、安装docker(照着图去这里找对应的下载下来https://download.docker.com/linux/static/stable/),将7个docker官网下载的文件下载下来后,传上去服务器随便一个文件夹或者常用的opt或者/usr/lo…

响应式编程一、Reactor核心

目录 一、前置知识1、Lambda表达式2、函数式接口 Function3、StreamAPI4、Reactive-Stream1&#xff09;几个实际的问题2&#xff09;Reactive-Stream是什么&#xff1f;3&#xff09;核心接口4&#xff09;处理器 Processor5&#xff09;总结 二、Reactor核心1、Reactor1&…