当前位置: 首页 > news >正文

JS事件的概念

概念

在 JavaScript 中,事件是指发生在 HTML 元素上的动作或交互。这些动作可以是用户触发的(如点击、鼠标移动、键盘输入),也可以是浏览器触发的(如页面加载、资源加载完成)。事件使网页能够对用户行为或系统状态变化作出响应,从而实现动态交互功能。

事件的三要素

  1. 事件源(Event Target):发生事件的 HTML 元素,例如按钮、输入框或文档本身。
  2. 事件类型(Event Type):描述事件的名称,如 clickmouseoverkeydown 等。
  3. 事件处理程序(Event Handler):当事件发生时执行的函数,也称为事件监听器(EventListener)。

常见事件类型

  • 鼠标事件clickdblclickmousedownmouseupmouseovermouseout
  • 键盘事件keydownkeyupkeypress
  • 表单事件submitchangefocusblurinput
  • 窗口事件loadresizescrollunload
  • 触摸事件(移动端):touchstarttouchendtouchmove

事件处理方式

HTML 属性绑定
直接在 HTML 元素中通过 on[event] 属性绑定事件处理函数:

<button onclick="alert('Clicked!')">点击</button>

DOM 属性绑定
通过 JavaScript 代码为 DOM 元素的属性赋值:

const button = document.querySelector('button');
button.onclick = function() { alert('Clicked!'); };

addEventListener 方法
现代推荐方式,支持多个监听器且更灵活:

button.addEventListener('click', function() { console.log('事件触发'); 
});

事件对象

当事件触发时,浏览器会创建一个事件对象(Event Object),包含事件的相关信息(如触发元素、坐标、按键等)。可通过事件处理函数的参数访问:

element.addEventListener('click', function(event) {console.log(event.target); // 获取触发事件的元素
});

事件传播机制

事件在 DOM 树中传播分为三个阶段:

  1. 捕获阶段(Capturing Phase):从根节点向下传递到目标元素。
  2. 目标阶段(Target Phase):到达事件目标元素。
  3. 冒泡阶段(Bubbling Phase):从目标元素向上冒泡到根节点。

可通过 addEventListener 的第三个参数控制监听阶段:

// 捕获阶段触发
element.addEventListener('click', handler, true); // 冒泡阶段触发(默认)
element.addEventListener('click', handler, false);

阻止默认行为和冒泡

  • event.preventDefault():阻止事件的默认行为(如表单提交、链接跳转)。
  • event.stopPropagation():阻止事件继续传播(冒泡或捕获)。
link.addEventListener('click', function(event) {event.preventDefault(); // 阻止链接跳转event.stopPropagation(); // 阻止事件冒泡
});

http://www.dtcms.com/a/347681.html

相关文章:

  • 【最后203篇系列】035 数据表同步简单方案
  • 深入理解 React useEffect
  • 语义普遍性与形式化:构建深层语义理解的统一框架
  • 串与数组:从字符处理到多维存储的数据结构详解
  • 【python】min(key=...)用法
  • 【Kubernetes知识点】资源配额与访问控制
  • 小白向:Obsidian(Markdown语法学习)快速入门完全指南:从零开始构建你的第二大脑(免费好用的笔记软件的知识管理系统)、黑曜石笔记
  • Redis学习笔记 ---- 基于token实现登录功能
  • 多媒体内容生成 - 超越文本的生产力
  • 使用自制的NTC测量模块测试Plecs的热仿真效果
  • python如何下载库——0基础教程
  • 【使用Unsloth 微调】数据集的种类
  • Linux|数据库|2025最新数据库管理工具cloudbeaver-25.0.1的docker方式部署和二进制方式部署
  • leetcode刷题记录03——top100题里的6道简单+1道中等题
  • 单例模式介绍
  • 企业视频库管理高效策略
  • Java和数据库的关系
  • 如何利用 DeepSeek 提升工作效率
  • C++的struct里面可以放函数,讨论一下C++和C关于struct的使用区别
  • 基于TimeMixer现有脚本扩展的思路分析
  • 网络参考模型操作指南
  • 大数据接口 - 企业风险报告(专业版)API接口文档
  • 【Vue✨】Vue 中的 diff 算法详解
  • Compose笔记(四十七)--SnackbarHost
  • 14.Shell脚本修炼手册--玩转循环结构(While 与 Until 的应用技巧与案例)
  • 使用sys数据库分析 MySQL
  • 2015-2018年咸海流域1km归一化植被指数8天合成数据集
  • 【大模型应用开发 4.RAG高级技术与实践】
  • LeetCode算法日记 - Day 20: 两整数之和、只出现一次的数字II
  • 《P3623 [APIO2008] 免费道路》