热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

《JavaScript高等顺序设计》进修笔记:JavaScript中的事宜流和事宜处置惩罚顺序

JavaScript和HTML之间的交互是经由过程事宜完成的。事宜:文档或浏览器窗口中发作的一些特定的交互霎时。能够运用侦听器(或处置惩罚递次来预订事宜),以便事宜发作时实行相应的

Javascript和HTML之间的交互是经由过程事宜完成的。

事宜:文档或浏览器窗口中发作的一些特定的交互霎时。

能够运用侦听器(或处置惩罚递次来预订事宜),以便事宜发作时实行相应的代码。

1. 事宜流

事宜流:从页面中吸收事宜的递次。

IE和Netscape开辟团队提出了差不多是完整相反的事宜流的观点。

  • IE: 事宜冒泡流
  • Netscape: 事宜捕捉流

1.1 事宜冒泡

事宜冒泡(event bubbling):事宜开始时由最详细的元素(文档中嵌套条理最深的谁人节点)吸收,然后逐级向上传播到较为不详细的节点(文档)。

1.2 事宜捕捉

事宜捕捉(event capturing):不太详细的节点应当更早吸收到事宜,最详细的节点应当末了吸收到事宜。

事宜捕捉的意图在于在事宜抵达预定目的之前捕捉它。

1.3 DOM事宜流

“DOM2级事宜”划定的事宜流包括三个阶段:

1. 事宜捕捉阶段
2. 处于目的阶段
3. 事宜冒泡阶段

2. 事宜处置惩罚递次

事宜是用户或浏览器本身实行的某种行动。如:click,load,mouseover。
相应某个事宜的函数称为事宜处置惩罚递次(或事宜侦听器)

2.1 HTML事宜处置惩罚递次

某个元素支撑的每种事宜,都能够运用一个与相应事宜处置惩罚递次同名的HTML特征来指定。


单击按钮,显现正告框。经由过程指定 onclick 特征并将一些Javascript代码作为它的值来定义。

在HTML中定义的事宜处置惩罚递次能够包括要实行的详细行动,也能够挪用在页面其他地方定义的剧本。



事宜处置惩罚递次中的代码在实行时,有权接见全局作用域中的任何代码。

瑕玷:

  1. 存在时差题目。用户在事宜处置惩罚递次被剖析之前就触发了事宜。
  2. 扩大事宜处置惩罚递次的作用域链在差别的浏览器中会致使差别效果。
  3. HTML和Javascript代码严密耦合。

2.2 DOM0 级事宜处置惩罚递次

经由过程Javascript指定事宜处置惩罚递次的传统体式格局,就是将一个函数赋值给一个事宜处置惩罚递次属性。

这类要领被称为事宜处置惩罚递次赋值,出现在第四代 Web 浏览器中。

每一个元素(包括 window 和 document)都有本身的事宜处置惩罚递次属性,属性一般悉数小写,如 onclick。将这类属性的值设置为一个函数,就能够指定事宜处置惩罚递次。


能够删除经由过程 DOM0 级要领指定的事宜处置惩罚递次。

btn.Onclick= null; // 删除事宜处置惩罚递次

2.3 DOM2 级事宜处置惩罚递次

“DOM2级事宜”定义了两个要领,用于处置惩罚指定和删除事宜处置惩罚递次的操纵:

  • addEventListener()
  • removeEventListener()

一切 DOM 节点都包括这两个要领,它们接收3个参数:

  1. 要处置惩罚的事宜名
  2. 作为事宜处置惩罚递次的函数
  3. 一个布尔值:

    • true: 捕捉阶段挪用事宜处置惩罚递次
    • false: 冒泡阶段挪用

为一个按钮增加 onclick 事宜处置惩罚递次:

var btn = document.getElementById("myBtn");
btn.addEventListener("click", function() {
alert(this.id);
}, false);

运用 DOM2级要领增加事宜处置惩罚递次的重要优点是能够增加多个事宜处置惩罚递次。

用 addEventListener() 增加的事宜处置惩罚递次只能运用 removeEventListener() 来移除,移除时传入的参数与增加时的参数雷同。所以,用 addEventListener() 增加的匿名函数将没法移除。

大多数状况下,都是将事宜处置惩罚递次增加到事宜流的冒泡阶段,如许能够最大限制地兼容种种浏览器。

2.4 IE 事宜处置惩罚递次

IE 完成了与 DOM 中相似的两个要领:

  • attachEvent()
  • detachEvent()

接收两个参数:事宜处置惩罚递次称号、事宜处置惩罚递次函数
经由过程这类要领增加的事宜处置惩罚递次会被增加到冒泡阶段。

var btn = document.getElementById("myBtn");
btn.attachEvent("onclick", function() {
alert("clicked");
});

注重: attachEvent() 的第一个参数是“onclick”,而不是 addEventListener()要领中的“click”。

在IE中运用 attachEvent() 与运用 DOM0 级要领的重要区分在于事宜处置惩罚递次的作用域。

  • DOM0 级要领:事宜处置惩罚递次会在其所属元素的作用域内运转
  • attachEvent()要领:事宜处置惩罚递次会在全局作用域内运转,this 即是 window。

2.5 跨浏览器的事宜处置惩罚递次

建立一个要领 addHandler(),它属于名叫EventUtil的对象视状况离别运用 DOM0级要领、 DOM2级要领或IE要领来增加事宜。

addHandler()要领吸收3个参数:

  1. 要操纵的元素
  2. 事宜称号
  3. 事宜处置惩罚递次函数

与其对应的要领是 removeHandler(),吸收雷同的参数。

var EventUtil = {
addHandler: function(element, type, handler) {
if (element.addEventListener) {
element.addEventListener(type, handler, false);
} else if (element.attachEvent) {
element.attachEvent("on" + type, handler);
} else {
element["on" + type] = handler;
}
},
removeHandler: function(element, type, handler) {
if (element.removeEventListener) {
element.removeEventListener(type, handler, false);
} else if (element.detachEvent) {
element.detachEvent("on" + type, handler);
} else {
element["on" + type] = null;
}
}
}

这两个要领起首都邑检测传入的元素中是不是存在DOM2级要领。假如存在DOM2级要领,则运用该要领。假如存在的是IE的要领,则采用第二种计划。

像下面如许运用EventUtil对象:

var btn = document.getElementById("myBtn");
var handler = function() {
alert("Clicked");
}
EventUtil.addHandler(btn, "click", handler);
EventUtil.removerHandler(btn, "click", handler);

推荐阅读
  • Redux入门指南
    本文介绍Redux的基本概念和工作原理,帮助初学者理解如何使用Redux管理应用程序的状态。Redux是一个用于JavaScript应用的状态管理库,特别适用于React项目。 ... [详细]
  • 本文详细介绍了 org.apache.commons.io.IOCase 类中的 checkCompareTo() 方法,通过多个代码示例展示其在不同场景下的使用方法。 ... [详细]
  • 利用决策树预测NBA比赛胜负的Python数据挖掘实践
    本文通过使用2013-14赛季NBA赛程与结果数据集以及2013年NBA排名数据,结合《Python数据挖掘入门与实践》一书中的方法,展示如何应用决策树算法进行比赛胜负预测。我们将详细讲解数据预处理、特征工程及模型评估等关键步骤。 ... [详细]
  • 在编译BSP包过程中,遇到了一个与 'gets' 函数相关的编译错误。该问题通常发生在较新的编译环境中,由于 'gets' 函数已被弃用并视为安全漏洞。本文将详细介绍如何通过修改源代码和配置文件来解决这一问题。 ... [详细]
  • 本文探讨了如何在Classic ASP中实现与PHP的hash_hmac('SHA256', $message, pack('H*', $secret))函数等效的哈希生成方法。通过分析不同实现方式及其产生的差异,提供了一种使用Microsoft .NET Framework的解决方案。 ... [详细]
  • 本文详细介绍了如何在云服务器上配置Nginx、Tomcat、JDK和MySQL。涵盖从下载、安装到配置的完整步骤,帮助读者快速搭建Java Web开发环境。 ... [详细]
  • 本文详细介绍了虚拟专用网(Virtual Private Network, VPN)的概念及其通过公共网络(如互联网)构建临时且安全连接的技术特点。文章探讨了不同类型的隧道协议,包括第二层和第三层隧道协议,并提供了针对IPSec、GRE以及MPLS VPN的具体配置指导。 ... [详细]
  • PHP 过滤器详解
    本文深入探讨了 PHP 中的过滤器机制,包括常见的 $_SERVER 变量、filter_has_var() 函数、filter_id() 函数、filter_input() 函数及其数组形式、filter_list() 函数以及 filter_var() 和其数组形式。同时,详细介绍了各种过滤器的用途和用法。 ... [详细]
  • 方法:1 配置数据库basediros.path.abspath(os.path.dirname(__file__))  #获取当前文件的绝对路径appFlask(__name__ ... [详细]
  • 本文详细解析了Java中hashCode()和equals()方法的实现原理及其在哈希表结构中的应用,探讨了两者之间的关系及其实现时需要注意的问题。 ... [详细]
  • 采用IKE方式建立IPsec安全隧道
    一、【组网和实验环境】按如上的接口ip先作配置,再作ipsec的相关配置,配置文本见文章最后本文实验采用的交换机是H3C模拟器,下载地址如 ... [详细]
  • 丽江客栈选择问题
    本文介绍了一道经典的算法题,题目涉及在丽江河边的n家特色客栈中选择住宿方案。两位游客希望住在色调相同的两家客栈,并在晚上选择一家最低消费不超过p元的咖啡店小聚。我们将详细探讨如何计算满足条件的住宿方案总数。 ... [详细]
  • 本题探讨了在大数据结构背景下,如何通过整体二分和CDQ分治等高级算法优化处理复杂的时间序列问题。题目设定包括节点数量、查询次数和权重限制,并详细分析了解决方案中的关键步骤。 ... [详细]
  • Coursera ML 机器学习
    2019独角兽企业重金招聘Python工程师标准线性回归算法计算过程CostFunction梯度下降算法多变量回归![选择特征](https:static.oschina.n ... [详细]
  • 深入解析Java虚拟机(JVM)架构与原理
    本文旨在为读者提供对Java虚拟机(JVM)的全面理解,涵盖其主要组成部分、工作原理及其在不同平台上的实现。通过详细探讨JVM的结构和内部机制,帮助开发者更好地掌握Java编程的核心技术。 ... [详细]
author-avatar
mobiledu2502912781
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有