热门标签 | 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);

推荐阅读
  • 本文介绍了如何利用JavaScript或jQuery来判断网页中的文本框是否处于焦点状态,以及如何检测鼠标是否悬停在指定的HTML元素上。 ... [详细]
  • 本文介绍如何使用阿里云的fastjson库解析包含时间戳、IP地址和参数等信息的JSON格式文本,并进行数据处理和保存。 ... [详细]
  • 本文介绍了多个关于JavaScript的书籍资源、实用工具和编程实例,涵盖从入门到进阶的各个阶段,帮助读者全面提升JavaScript编程能力。 ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 主要用了2个类来实现的,话不多说,直接看运行结果,然后在奉上源代码1.Index.javaimportjava.awt.Color;im ... [详细]
  • 前言--页数多了以后需要指定到某一页(只做了功能,样式没有细调)html ... [详细]
  • DNN Community 和 Professional 版本的主要差异
    本文详细解析了 DotNetNuke (DNN) 的两种主要版本:Community 和 Professional。通过对比两者的功能和附加组件,帮助用户选择最适合其需求的版本。 ... [详细]
  • 探讨如何真正掌握Java EE,包括所需技能、工具和实践经验。资深软件教学总监李刚分享了对毕业生简历中常见问题的看法,并提供了详尽的标准。 ... [详细]
  • 自己用过的一些比较有用的css3新属性【HTML】
    web前端|html教程自己用过的一些比较用的css3新属性web前端-html教程css3刚推出不久,虽然大多数的css3属性在很多流行的浏览器中不支持,但我个人觉得还是要尽量开 ... [详细]
  • 本文介绍了Android开发中Intent的基本概念及其在不同Activity之间的数据传递方式,详细展示了如何通过Intent实现Activity间的跳转和数据传输。 ... [详细]
  • 本文深入探讨了HTTP请求和响应对象的使用,详细介绍了如何通过响应对象向客户端发送数据、处理中文乱码问题以及常见的HTTP状态码。此外,还涵盖了文件下载、请求重定向、请求转发等高级功能。 ... [详细]
  • 本文详细介绍了 com.facebook.drawee.view.SimpleDraweeView 中的 setScaleType 方法,提供了多个实际代码示例,并解释了其在不同场景下的应用。 ... [详细]
  • 本文探讨了 Spring Boot 应用程序在不同配置下支持的最大并发连接数,重点分析了内置服务器(如 Tomcat、Jetty 和 Undertow)的默认设置及其对性能的影响。 ... [详细]
  • 深入解析 Apache Shiro 安全框架架构
    本文详细介绍了 Apache Shiro,一个强大且灵活的开源安全框架。Shiro 专注于简化身份验证、授权、会话管理和加密等复杂的安全操作,使开发者能够更轻松地保护应用程序。其核心目标是提供易于使用和理解的API,同时确保高度的安全性和灵活性。 ... [详细]
  • 本文介绍如何通过 JavaScript 实现一个基于鼠标坐标的 Tooltip 弹出层,详细解释了如何获取窗口和文档的尺寸及滚动位置,并优化了代码结构。 ... [详细]
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社区 版权所有