JavaScript高级程序设计 阅读笔记(十七) js事件

JavaScript是一种基于对象和事件驱动的编程语言,可以实现页面的互动效果。在JavaScript高级程序设计中,js事件的相关知识是常见的知识点。本篇笔记主要介绍js事件的相关内容。

事件的概述

在Web应用中,经常需要处理用户的输入或操作,例如,鼠标单击、按键按下等操作。这种操作可以称之为事件,事件可以被JavaScript代码监听并进行相应的处理,从而实现页面的互动效果。

事件处理程序

为了监听和处理事件,JavaScript提供了事件处理程序。事件处理程序可以是函数或是函数表达式,可以通过HTML元素的属性来指定,例如:

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

上述代码中,按钮元素的onclick属性会在按钮被点击时执行alert('Hello')语句。

另外,也可以通过JavaScript代码来为元素添加事件处理程序,例如:

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

上述代码中,querySelector方法获取了第一个button元素,然后为按钮元素的onclick属性赋值一个函数表达式,函数表达式实现了弹出Hello的效果。

事件模型

JavaScript事件模型分为两种:DOM0级事件和DOM2级事件。DOM0级事件是指通过HTML元素的属性来指定事件处理程序,例如上面示例中的按钮的onclick属性。DOM2级事件是指通过addEventListener()和removeEventListener()方法来实现事件处理程序的添加和删除。

这两种事件模型的主要区别在于多个事件处理程序的执行顺序。在DOM0级事件中,同一事件只能指定一个事件处理程序。在DOM2级事件中,一个元素可以为同一事件指定多个事件处理程序,多个事件处理程序的执行顺序由添加的顺序决定。

事件流

事件流描述的是事件从页面中接收的顺序,事件可以沿着两个方向流动:从文档顶部向下流动(捕获阶段)和从文档底部向上流动(冒泡阶段)。

当HTML元素嵌套时,事件的流动会按照HTML元素的嵌套结构依次触发,先从祖先元素开始触发,再依次向下触发。

<div id="outer">
    <div id="inner">点击这里</div>
</div>
var outer = document.querySelector('#outer');
var inner = document.querySelector('#inner');

outer.addEventListener('click', function() {
    console.log('outer');
}, true);
inner.addEventListener('click', function() {
    console.log('inner');
}, true);

上述代码中,在outer元素和inner元素都添加了事件处理程序,第三个参数设置为true,则事件处于捕获阶段。这时,点击inner元素,会先触发outer元素的事件处理程序,然后再触发inner元素的事件处理程序。

阻止事件冒泡和默认行为

在事件冒泡过程中,除非阻止事件冒泡,否则事件会一直冒泡到document对象,可以使用stopPropagation()方法来阻止事件冒泡。

另外,有些元素在默认情况下会执行一些操作,例如在表单中提交表单数据时,可以使用preventDefault()方法来阻止元素默认行为的执行。

<a href="https://www.baidu.com/">百度一下</a>
var a = document.querySelector('a');
a.addEventListener('click', function(event) {
    event.preventDefault();
}, false);

上述代码中,在点击a元素时,将会阻止默认行为,不会打开新的页面。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript高级程序设计 阅读笔记(十七) js事件 - Python技术站

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

相关文章

  • 每个 JavaScript 工程师都应懂的33个概念

    “每个 JavaScript 工程师都应懂的33个概念”是一本非常重要的书籍,其中记录了每个JavaScript工程师需要掌握的33个概念。在本文中,我会详细介绍这本书中的每个概念,以及如何应用它们。 1. 理解页面加载和渲染 在这个章节里,作者介绍了关于页面加载过程的一些细节,以及如何优化页面的加载速度。其中提到了减少HTTP请求、使用无阻塞脚本、使用CS…

    JavaScript 2023年5月18日
    00
  • JavaScript 截取字符串代码实例

    下面是“JavaScript 截取字符串代码实例”的完整攻略。 什么是字符串截取? 在编程中,字符串截取是指在一个字符串中截取一段指定长度的字符或某一范围内的字符。在 JavaScript 中,通过截取字符串可以获取到需要使用的部分内容,这在字符串处理中是很常见的操作。 JavaScript 截取字符串的方法 JavaScript 提供了几种截取字符串的方法…

    JavaScript 2023年5月28日
    00
  • 解决前端跨域问题方案汇总

    让我来为您详细讲解解决前端跨域问题方案汇总的完整攻略。 一、跨域问题简介 跨域(Cross-Origin)是指在浏览器的同源策略下,不同源的服务器无法通信的一种安全机制。同源是指协议、域名和端口号完全相同。 例如: http://www.example.com 与 http://www.example.com/path1 为同源; http://www.ex…

    JavaScript 2023年6月11日
    00
  • vscode录音及语音实时转写插件开发并在工作区生成本地mp3文件附踩坑日记!

    vscode录音及语音实时转写插件开发并在工作区生成本地mp3文件附踩坑日记! 背景 语音识别技术的普及使得语音转写逐渐成为电脑输入的重要方式之一,而实时语音转写更是越来越多的应用场景。本文介绍如何在VS Code中开发一个语音实时转写插件,并将实时转写的结果保存到本地mp3文件中。 准备 在进行实时语音转写插件的开发之前,需要准备以下工具和环境: 麦克风及…

    JavaScript 2023年6月11日
    00
  • JS获取html元素的标记名实现方法

    获取 HTML 元素标记名是 JavaScript 中常用的操作,以下是实现方法的详细攻略: 1. 使用 tagName 属性获取标记名 可以使用 tagName 属性来获取 HTML 元素的标记名。该属性只能用于 DOM 对象,对于文本节点和注释节点是无效的。 示例代码如下: // 获取某个元素的标记名 const element = document.g…

    JavaScript 2023年6月10日
    00
  • JFinal使用ajaxfileupload实现图片上传及预览

    以下是使用 JFinal 和 ajaxfileupload 实现图片上传及预览的完整攻略。 准备工作 首先,你需要在你的项目中引入 JFinal 和 ajaxfileupload,具体引入方式可以参考官方文档。 接着,你需要准备一个接口用于接收上传的图片,并返回图片的路径或其他信息,可以在你的 JFinal Controller 中编写一个如下的示例方法: …

    JavaScript 2023年6月11日
    00
  • JavaScript的11个小技巧整理

    JavaScript的11个小技巧整理 在这篇文章中,我们将学习JavaScript中一些有用的小技巧,这些技巧可能会使我们的代码更加简短和高效。 1. 数组拆分和连接 在JavaScript中,我们可以使用扩展运算符 … 来拆分和连接数组。 数组拆分 例如,我们可以将一个数组拆分成两个数组: const arr = [1, 2, 3, 4, 5]; c…

    JavaScript 2023年5月17日
    00
  • 如何使用IOS自动化测试工具UIAutomation

    如何使用IOS自动化测试工具UIAutomation攻略 简介 UIAutomation是苹果官方提供的测试工具,可以进行IOS应用的自动化测试。它可以在模拟器或真机上运行,可以创建脚本来模拟用户在应用程序上的操作,然后对这些操作的结果进行验证。 UIAutomation依赖于Javascript语言,并且提供了一些函数来访问IOS应用的UI元素,例如滚动、…

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