热门标签 | 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代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文介绍了闭包的定义和运转机制,重点解释了闭包如何能够接触外部函数的作用域中的变量。通过词法作用域的查找规则,闭包可以访问外部函数的作用域。同时还提到了闭包的作用和影响。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • PHP中的单例模式与静态变量的区别及使用方法
    本文介绍了PHP中的单例模式与静态变量的区别及使用方法。在PHP中,静态变量的存活周期仅仅是每次PHP的会话周期,与Java、C++不同。静态变量在PHP中的作用域仅限于当前文件内,在函数或类中可以传递变量。本文还通过示例代码解释了静态变量在函数和类中的使用方法,并说明了静态变量的生命周期与结构体的生命周期相关联。同时,本文还介绍了静态变量在类中的使用方法,并通过示例代码展示了如何在类中使用静态变量。 ... [详细]
  • 标题: ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • PHP图片截取方法及应用实例
    本文介绍了使用PHP动态切割JPEG图片的方法,并提供了应用实例,包括截取视频图、提取文章内容中的图片地址、裁切图片等问题。详细介绍了相关的PHP函数和参数的使用,以及图片切割的具体步骤。同时,还提供了一些注意事项和优化建议。通过本文的学习,读者可以掌握PHP图片截取的技巧,实现自己的需求。 ... [详细]
  • 本文介绍了使用PHP实现断点续传乱序合并文件的方法和源码。由于网络原因,文件需要分割成多个部分发送,因此无法按顺序接收。文章中提供了merge2.php的源码,通过使用shuffle函数打乱文件读取顺序,实现了乱序合并文件的功能。同时,还介绍了filesize、glob、unlink、fopen等相关函数的使用。阅读本文可以了解如何使用PHP实现断点续传乱序合并文件的具体步骤。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • springmvc学习笔记(十):控制器业务方法中通过注解实现封装Javabean接收表单提交的数据
    本文介绍了在springmvc学习笔记系列的第十篇中,控制器的业务方法中如何通过注解实现封装Javabean来接收表单提交的数据。同时还讨论了当有多个注册表单且字段完全相同时,如何将其交给同一个控制器处理。 ... [详细]
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社区 版权所有