一、事件流的概念

+ 事件流描述的是从页面中接收事件的顺序。

二、事件捕获和事件冒泡

+    事件冒泡接收事件的顺序:

+   事件捕获接收事件顺序:

+   IE中的事件流叫事件冒泡,IE中没有事件捕获,所有浏览器都支持事件冒泡(IE9、opera、safari、chrome、Firefox支持事件捕获,老版本浏览器不支持事件捕获)。

三、DOM事件流

+ DOM事件流的三个阶段: 事件捕获、处理目标、事件冒泡

例子:(注:EventUtil对象代码在后面的第六个标题中)

              var btn = document.getElementById("btn");btn.onclick = function(event) {var e = EventUtil.getEvent(event);EventUtil.stopPropagation(e); //1、2alert("2");};document.body.addEventListener("click",function(event) {var e = EventUtil.getEvent(event);// EventUtil.stopPropagation(e); //1alert("1");},true);document.body.onclick = function(event) {var e = EventUtil.getEvent(event);// EventUtil.stopPropagation(e); //1、2、3alert("3");};

+ IE9、opera、safari、chrome、Firefox支持DOM事件流

四、事件处理程序

+  事件处理程序以"on"开头,即在事件名称前加on即事件处理程序(如:onclick、onload等等)。

+ 下面这种方式无需引用表单元素就能显示表单字段(因为事件处理程序自动扩展了作用域)。

              <form><input type="text" name="username" value="21" id="adom"><input type="text" οnclick="alert(adom.value)"> <!--21--></form>

+  事件处理程序创建的封装属性值的函数中,有一个局部变量event,通过这个事件对象event可以获取事件对象中的一些信息。

不同的事件类型,event具有的属性和方法不一样。

 五、事件对象

+  DOM中的事件对象

所有事件都会有的方法:

+  IE中的事件对象

所有事件都会有的方法:

 六、跨浏览器事件处理程序

<script>var EventUtil = {//事件处理addHandler: function(element, type, handler) {if(element.addEventListener) {element.addEventListener(type, handler, false);} else if(element.attachEvent) {//ie9之前的浏览器的事件监听方式,和上面的方式不一样//attachEvent中的事件类型前有一个onelement.attachEvent("on"+type,handler);} else {element["on"+type] = handler;}},//ie8即更早版本只支持事件冒泡,ie中使用attachEvent//事件处理程序会在全局作用域中运行,所以回调函数中的this等于window,//而不是当前点击的元素getEvent: function(event) {return event ? event : window.event;},//获取目标对象,即当前被点击的元素IE中用event.srcElement获取getTarget: function(event) {return event.target || event.srcElement;},preventDefault: function(event) {if(event.preventDefault) {event.preventDefault();} else {//IEevent.returnValue = false;}},removeHandler: function(element, type, handler) {if(element.removeHandler) {element.removeListener(type, handler, false);} else if(element.detachEvent) {element.detachEvent("on"+type,handler);} else {element["on"+type] = null;}},stopPropagation: function(event) {if(event.stopPropagation) {event.stopPropagation();} else {//IEevent.cancelBubble = true;}}};var btn = document.getElementById("btn");EventUtil.addHandler(btn,"click",function(event) {var e = EventUtil.getEvent(event);
//              alert("hello");});</script>

事件一览表:https://developer.mozilla.org/zh-CN/docs/Web/Events

addEventListener: https://developer.mozilla.org/zh-CN/docs/Web/API/EventTarget/addEventListener

转载于:https://www.cnblogs.com/yy95/p/5931378.html

再次理解javascript中的事件相关推荐

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

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

  2. 理解JavaScript中的事件

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

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

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

  4. 理解javascript中的回调函数(callback)【转】

    在JavaScrip中,function是内置的类对象,也就是说它是一种类型的对象,可以和其它String.Array.Number.Object类的对象一样用于内置对象的管理.因为function实 ...

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

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

  6. 理解javascript中的回调函数(callback)

    理解javascript中的回调函数(callback) 在JavaScrip中,function是内置的类对象,也就是说它是一种类型的对象,可以和其它String.Array.Number.Obje ...

  7. 帮助你更好理解javascript中easing功能的网站 - Easings.net

    日期:2012-10-17  来源:GBin1.com 如果你开发过jQuery的动画效果的话,肯定接触过一个jQuery插件:jquery.easing plugin,这个插件可以帮助你生成不同类型 ...

  8. 再次理解STM32中的堆栈机制

    再次理解STM32中的堆栈机制 刚拿到STM32时,你只编写一个死循环 void main() { while(1); }BUILD://Program Size: Code=340 RO-data= ...

  9. 浅谈JavaScript中的事件

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

最新文章

  1. EGO首次线下活动分享:Facebook研发团队的高效秘诀
  2. C++ STL下载和安装
  3. 5.25. Spring boot with Git version
  4. linux服务器ftp上传文件为空,Linux 服务器 ftp上传文件出现的问题
  5. redis主从复制原理、断点续传、无磁盘化复制、过期key处理
  6. Qt Creator设置场景环境
  7. 算法学习笔记2022.1.11
  8. 实现DDD领域驱动设计: Part 4
  9. python中的PEP是什么?怎么理解?(转)
  10. 工作214:结构 vue操作一个很有意思的报错 [Vue warn]: You may have an infinite update loop in a component
  11. tar 解压_关于Ubuntu下解压tar.xz方法记录
  12. ASP.NET技巧:字符自动截取问题
  13. PAT-乙级-1034 有理数四则运算
  14. 2022最新版sci和ssci双检索期刊,详细期刊目录值得了解!
  15. 漏洞挖掘 符号执行_漏洞挖掘综述
  16. Python-Django毕业设计基于的餐厅管理系统(程序+Lw)
  17. 车辆出险保险索赔技巧——让每个车友都能学习
  18. 机器学习-疑点1 :shape[ ]的理解
  19. js 对象的键名 可以是数字么
  20. 如何在SVN中忽略某个文件或文件夹

热门文章

  1. 星空唯美浮雕效果背景源码
  2. 建筑工程响应式网站模板
  3. 响应式设计PageAdmin个人博客系统源码v4.0.10
  4. 域名劫持到百度被黑详解DNS技术
  5. Visual Studio 2008 SP1 和 net framework 3.5 新特性
  6. Node.js: fs.readFile/writeFile 和 fs.createReadStream/writeStream 区别
  7. 调整谷歌reCAPTCHA大小 How to resize the Google noCAPTCHA reCAPTCHA
  8. 如何使用社会化媒体网络建立个人品牌(国外篇)
  9. 【jQuery插件】Twitter Search
  10. 在 CodeIgniter 中使用 jQuery 实现 AJAX