再次理解javascript中的事件
一、事件流的概念
+ 事件流描述的是从页面中接收事件的顺序。
二、事件捕获和事件冒泡
+ 事件冒泡接收事件的顺序:
+ 事件捕获接收事件顺序:
+ 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中的事件相关推荐
- php event loop,理解javascript中的事件循环(Event Loop)
背景 在研究js的异步的实现方式的时候,发现了JavaScript 中的 macrotask 和 microtask 的概念.在查阅了一番资料之后,对其中的执行机制有所了解,下面整理出来,希望可以帮助 ...
- 理解JavaScript中的事件
在很多语言的学习中,"事件"都是一个比较难理解,但是又是一个很重要的概念.JavaScript中的事件处理也是一样,正因为有了事件处理,才会出现Ajax拖动的效果.本文就讨论一下J ...
- 12.在JavaScript中的事件模型如何理解?
一.事件与事件流 javascript中的事件,可以理解就是在HTML文档或者浏览器中发生的一种交互操作,使得网页具备互动性, 常见的有加载事件.鼠标事件.自定义事件等 由于DOM是一个树结构,如果在 ...
- 理解javascript中的回调函数(callback)【转】
在JavaScrip中,function是内置的类对象,也就是说它是一种类型的对象,可以和其它String.Array.Number.Object类的对象一样用于内置对象的管理.因为function实 ...
- 【前端学习】前端学习第十五天:JavaScript中的事件模型
在各种浏览器中存在三种事件模型:原始事件模型.DOM事件模型和IE事件模型: 一.原始事件模型: 原始事件模型被所有浏览器支持: 在原始事件模型中.事件一旦发生就直接调用事件处理函数,事件不会向别的对 ...
- 理解javascript中的回调函数(callback)
理解javascript中的回调函数(callback) 在JavaScrip中,function是内置的类对象,也就是说它是一种类型的对象,可以和其它String.Array.Number.Obje ...
- 帮助你更好理解javascript中easing功能的网站 - Easings.net
日期:2012-10-17 来源:GBin1.com 如果你开发过jQuery的动画效果的话,肯定接触过一个jQuery插件:jquery.easing plugin,这个插件可以帮助你生成不同类型 ...
- 再次理解STM32中的堆栈机制
再次理解STM32中的堆栈机制 刚拿到STM32时,你只编写一个死循环 void main() { while(1); }BUILD://Program Size: Code=340 RO-data= ...
- 浅谈JavaScript中的事件
事件在javascript中是响应用户的一种基本操作,本文列举了两种javascript中的事件模型及其绑定的方式,希望能对你的学习带来一点帮助.这些都是非常基础的但或许其中有你所遗漏.(以下事件均针 ...
最新文章
- EGO首次线下活动分享:Facebook研发团队的高效秘诀
- C++ STL下载和安装
- 5.25. Spring boot with Git version
- linux服务器ftp上传文件为空,Linux 服务器 ftp上传文件出现的问题
- redis主从复制原理、断点续传、无磁盘化复制、过期key处理
- Qt Creator设置场景环境
- 算法学习笔记2022.1.11
- 实现DDD领域驱动设计: Part 4
- python中的PEP是什么?怎么理解?(转)
- 工作214:结构 vue操作一个很有意思的报错 [Vue warn]: You may have an infinite update loop in a component
- tar 解压_关于Ubuntu下解压tar.xz方法记录
- ASP.NET技巧:字符自动截取问题
- PAT-乙级-1034 有理数四则运算
- 2022最新版sci和ssci双检索期刊,详细期刊目录值得了解!
- 漏洞挖掘 符号执行_漏洞挖掘综述
- Python-Django毕业设计基于的餐厅管理系统(程序+Lw)
- 车辆出险保险索赔技巧——让每个车友都能学习
- 机器学习-疑点1 :shape[ ]的理解
- js 对象的键名 可以是数字么
- 如何在SVN中忽略某个文件或文件夹
热门文章
- 星空唯美浮雕效果背景源码
- 建筑工程响应式网站模板
- 响应式设计PageAdmin个人博客系统源码v4.0.10
- 域名劫持到百度被黑详解DNS技术
- Visual Studio 2008 SP1 和 net framework 3.5 新特性
- Node.js: fs.readFile/writeFile 和 fs.createReadStream/writeStream 区别
- 调整谷歌reCAPTCHA大小 How to resize the Google noCAPTCHA reCAPTCHA
- 如何使用社会化媒体网络建立个人品牌(国外篇)
- 【jQuery插件】Twitter Search
- 在 CodeIgniter 中使用 jQuery 实现 AJAX