1. 事件绑定的几种方式

   主要介绍一下 最常用的事件设计 其他就稍微带过。

  直接在代码里面添加onclick指定函数名字。

  

  B) 在JS代码中通过dom元素的onclick等属性

  

  这种做法this表示当前DOM对象 还有一点 这种做法只能绑定一个事件处理函数 后面的会覆盖前面的。可以看出 只能打印 "2 = div"

  C) 至于IE下面的attachEvent 函数就不介绍了 直接介绍W3C的 标准的 addEventListener 和 removeEventListener。

  IE8 之前都不支持 IE9就开始支持了。

  addEventListener(type, listener, userCapture);

  // type : 事件类型 不含"on"  "click" "keydown"

   // listener : 事件处理函数

   // userCapture 是事件冒泡 还是事件捕获默认false 代表时间冒泡类型

  事件处理函数中this代表的是dom对象 不是window 这个特性与attachEvent不同

  

  B 同一个事件处理函数可以绑定2次 一次用于事件捕获 一次用于时间冒泡。

  

2. 事件处理函数的执行顺序

  前面的方式都不能实现事件的重复绑定 所以自然也就不存在执行顺序的问题 最后面的一种可以重复绑定 所以需要了解执行顺序的问题。

  addEventListener 和attachEvent表现一致。如果给同一个事件绑定多个处理函数 先绑定的先执行

  

  当点击outA的时候 会依次打印出 1 2 3 4 这里需要特别注意 我们给定A绑定多个onclick事件处理函数 也是直接点击A触发的事件 所以不涉及事件冒泡和事件捕获的问题。

 

3. 事件冒泡和事件捕获

    

  如果点击了最内侧的C 那么最外层的A算不算被点击了呢。 很显然算的 不然就没有必要区分事件冒泡和事件捕获

  

  一般来说 事件冒泡机制用的更多一点 所以在IE8 之前 IE 只支持事件冒泡 IE9+/FF/Chrome这2种模型都支持,可以通过addEventListener((type, listener, useCapture)的useCapture来设定,useCapture=false代表着事件冒泡,useCapture=true代表着采用事件捕获

  

  事件冒泡 当点击C的时候 打印顺序是3 2 1. 将false 改成true 打印的顺序就是 1  2  3

4. DOM事件流

  

  
    DOM事件流:将事件分为三个阶段:捕获阶段、目标阶段、冒泡阶段。先调用捕获阶段的处理函数,其次调用目标阶段的处理函数,最后调用冒泡          阶段的处理函数。

    

    当点击outC的时候,依次打印出capture1–>capture2–>target–>bubble2–>bubble1。到这里是不是可以理解addEventListener(type,handler,useCapture)这个API中第三个参数useCapture的含义呢?useCapture=false意味着:将事件处理函数加入到冒泡阶段,在冒泡阶段会被调用;useCapture=true意味着:将事件处理函数加入到捕获阶段,在捕获阶段会被调用。从DOM事件流模型可以看出,捕获阶段的事件处理函数,一定比冒泡阶段的事件处理函数先执行。

 5 事件函数执行先后顺序

    目标自身触发事件 是冒泡还是捕获无所谓

    捕获阶段的处理函数最先执行,其次是目标阶段的处理函数,最后是冒泡阶段的处理函数。

    目标阶段的处理函数,先注册的先执行,后注册的后执行

6. 阻止事件冒泡和捕获

    默认情况下 多个事件处理函数会按照DOM 事件流模型中的顺序执行 如果子元素上发生某个事件 不需要执行父元素上注册的事件处理函数

    那么我们可以停止捕获和冒泡 前面提到的事件绑定方式,都可以实现阻止事件的传播。由于第5种方式,是最推荐的做法。所以我们基于第5种方    式,看看如何阻止事件的传播行为。IE8以及以前可以通过 window.event.cancelBubble=true阻止事件的继续传播;IE9+/FF/Chrome通过     event.stopPropagation()阻止事件的继续传播。

    

    点击outC的时候,之后打印出capture–>target,不会打印出bubble。因为当事件传播到outC上的处理函数时,通过stopPropagation阻止了事件的继续传播,所以不会继续传播到冒泡阶段。

转载于:https://www.cnblogs.com/syomm/p/5747441.html

JavaScript 中的事件设计相关推荐

  1. 如何在JavaScript中直观地设计状态

    by Shawn McKay 肖恩·麦凯(Shawn McKay) 如何在JavaScript中直观地设计状态 (How to visually design state in JavaScript) ...

  2. 浅谈JavaScript中的事件

    事件在javascript中是响应用户的一种基本操作,本文列举了两种javascript中的事件模型及其绑定的方式,希望能对你的学习带来一点帮助.这些都是非常基础的但或许其中有你所遗漏.(以下事件均针 ...

  3. JavaScript学习笔记06【高级——JavaScript中的事件】

    w3school 在线教程:https://www.w3school.com.cn JavaScript学习笔记01[基础--简介.基础语法.运算符.特殊语法.流程控制语句][day01] JavaS ...

  4. 【前端学习】前端学习第十五天:JavaScript中的事件模型

    在各种浏览器中存在三种事件模型:原始事件模型.DOM事件模型和IE事件模型: 一.原始事件模型: 原始事件模型被所有浏览器支持: 在原始事件模型中.事件一旦发生就直接调用事件处理函数,事件不会向别的对 ...

  5. java基础66 JavaScript中的事件、localtion对象、screen对象(网页知识)

    1.JavaScript中的事件注册 1.1.事件的注册方式 方式1:直接在html元素上注册<body onLoad="ready()"></body > ...

  6. 12.在JavaScript中的事件模型如何理解?

    一.事件与事件流 javascript中的事件,可以理解就是在HTML文档或者浏览器中发生的一种交互操作,使得网页具备互动性, 常见的有加载事件.鼠标事件.自定义事件等 由于DOM是一个树结构,如果在 ...

  7. 「前端面试题系列7」Javascript 中的事件机制(从原生到框架)

    前言 这是前端面试题系列的第 7 篇,你可能错过了前面的篇章,可以在这里找到: 理解函数的柯里化 ES6 中箭头函数的用法 this 的原理以及用法 伪类与伪元素的区别及实战 如何实现一个圣杯布局? ...

  8. 理解JavaScript中的事件

    在很多语言的学习中,"事件"都是一个比较难理解,但是又是一个很重要的概念.JavaScript中的事件处理也是一样,正因为有了事件处理,才会出现Ajax拖动的效果.本文就讨论一下J ...

  9. php event loop,理解javascript中的事件循环(Event Loop)

    背景 在研究js的异步的实现方式的时候,发现了JavaScript 中的 macrotask 和 microtask 的概念.在查阅了一番资料之后,对其中的执行机制有所了解,下面整理出来,希望可以帮助 ...

最新文章

  1. Unable to inject views for BcFragment{8d4c0 #1 id=0x7f0d00a1}
  2. 百度信息流和搜索业务中的弹性近线计算探索与应用
  3. PICRUSt2软件
  4. 第三届福建省大学生智能车竞赛
  5. 为什么 CAPTCHA 变得越来越难?因为 AI 更聪明了
  6. python中文解释-python注释不能识别中文
  7. Shell 显示带颜色字体
  8. Dijkstra算法的粗略学习
  9. 【初窥javascript奥秘之闭包】叶大侠病都好了,求不踩了:)
  10. 【渝粤题库】陕西师范大学210032学前心理学 作业(专升本)
  11. phpcms v9宽字节注入问题
  12. IP通信基础 3月6日
  13. ctr预估之特征工程
  14. RTOS中动态内存和静态内存管理机制
  15. 云课堂智慧php函数测验,云课堂智慧职教答案查询
  16. python金融衍生品大数据分析豆瓣_Python金融衍生品大数据分析
  17. C语言使用代码绘制爱心
  18. Ble低功耗蓝牙和蓝牙mesh网络之间的关系
  19. 明日之后服务器维护到几点,明日之后:凌晨三点停机维护,优化排队体验,百万阴兵要撤退了?...
  20. 虚幻引擎_矢量场初探

热门文章

  1. weblogic服务器保存图片失败解决办法
  2. 转:如何进行软件架构设计?
  3. 产品观,来自微信张小龙的
  4. Spring Aop 日志管理及配置文件的详细配置
  5. JAVA时间格式的处理 SimpleDateFormat 类(小结)
  6. Spring 2.5:Spring MVC中的新特性
  7. 链表的各种操作实现 链表逆序 链表排序 有序链表归并 链表存在环的判定
  8. Hadoop系列七:Hadoop之sqoop篇
  9. (转载)java工程师15本必读书籍推荐
  10. Java中SeparatedListAdapter类的实现