[转]JavaScript事件(Event)
一、事件流
1、事件冒泡
事件沿DOM树向上传播
2、事件捕获
事件到达预定目标之前被捕获
3、DMO2级事件
事件捕获阶段,处于目标阶段,事件冒泡阶段
二、事件处理程序 格式:on + "事件名" 1、HTML事件处理程序
1 <input type="button" value="click me" onclick="showMessage()" >
2、DOM0级事件处理程序
1 element.onclick = function(){ //... }
3、DOM2级事件处理程序
1 element.addEventListener(type,handle,boolean); 2 element.removeEventListener(type,handle,boolean);
4、IE事件处理程序(ie9以下版本)
1 element.attachEvent("on" + type,handle); 2 element.detachEvent("on" + type,handle);
【注:此时事件处理函数的作用域为全局作用域,this等于window】 三、事件对象 1、DOM(DOM0或DOM2级)中的事件对象 a、事件对象(event)作为参数传入于事件处理程序中b、对象this,currentTarget,target之间的关系 对象this始终等于currentTarget当事件处于捕获或冒泡阶段时,三者不相等当事件处于目标阶段时,三者相等 c、preventDefault()与stopPropagation()preventDefault(): 取消事件默认行为stopPropagation(): 阻止事件的捕获和冒泡 2、IE中的事件对象(ie9以下版本) a、通过window.event来访问事件对象,在使用attach添加事件时,也可以作为参数传入b、cancelBubble设置为true时,取消事件冒泡c、returnValue设置为false时,取消事件的默认行为d、srcElement与DOM中的target属性相同 四、跨浏览器的事件对象
![](/assets/blank.gif)
1 var EventUtil = {2 addHandler: function(element,type,handler){3 if(element.addEventListener){4 element.addEventListener(type,handler,false);5 }else if(element.attachEvent){6 element.attachEvent( "on" + type,handler);7 }else{8 element["on" + type] = handler;9 } 10 }, 11 getEvent: function(e){ 12 return e ? e : window.event; 13 }, 14 getTarget: function(e){ 15 e = this.getEvent(e); 16 return e.target || e.srcElement; 17 }, 18 getRelatedTarget: function(e){ 19 e = this.getEvent(e); 20 if(e.relatedTarget){ 21 return e.relatedTarget; 22 }else if(e.fromTarget){ 23 return e.fromTarget; 24 }else if(e.toTarget){ 25 return e.toTarget; 26 }else{ 27 return null; 28 } 29 }, 30 stopPropagation: function(e){ 31 e = this.getEvent(e); 32 if(e.stopPropagation){ 33 e.stopPropagation(); 34 }else{ 35 e.cancelBubble = true; 36 } 37 }, 38 preventDefault: function(e){ 39 e = this.getEvent(e); 40 if(e.preventDefault){ 41 e.preventDefault(); 42 }else{ 43 e.returnValue = false; 44 } 45 }, 46 removeHandler: function(element,type,handler){ 47 if(element.removeEventListener){ 48 element.removeEventListener(type,handler,false); 49 }else if(element.detachEvent){ 50 element.detachEvent( "on" + type,handler); 51 }else{ 52 element["on" + type] = null; 53 } 54 } 55 }
![](/assets/blank.gif)
五、事件委托 事件委托: 就是利用事件冒泡,把事件注册到目标元素的更高层级元素上,用来减少页面事件处理程序,提高页面性能 如:HTML
1 <ul id="ul"> 2 <li id="li1"></li> 3 <li id="li2"></li> 4 <li id="li3"></li> 5 </ul>
JavaScript
![](/assets/blank.gif)
1 var ul = document.getElementById("ul");2 EventUtil.addHandler(ul,"click",function(e){3 var target = EventUtil.getTarget(e);4 switch(target.id){5 case "li1":6 console.log(target.id);7 break;8 9 case "li2": 10 console.log(target.id); 11 break; 12 13 case "li3": 14 console.log(target.id); 15 break; 16 } 17 });
![](/assets/blank.gif)
六、命名空间(对象)中的变量访问 命名空间中的变量可以直接访问全局中的变量,但是不能访问其他(函数)作用域中的变量,只能通过传递参数来访问 1、错误代码:
![](/assets/blank.gif)
1 obj = { 2 method: function(){ 3 console.log(arg); 4 } 5 } 6 function fn(arg){ 7 obj.method(); 8 } 9 fn("test"); //arg is not defined
![](/assets/blank.gif)
不能直接访问其他作用域中的变量 2、访问全局变量:
![](/assets/blank.gif)
1 var arg = "test"; 2 var obj = { 3 method: function(){ 4 console.log(arg); //可以直接访问全局变量arg 5 } 6 } 7 obj.method(); //test
![](/assets/blank.gif)
3、传递参数来访问变量:
![](/assets/blank.gif)
1 var obj = { 2 method: function(arg){ //通过传递参数来访问其他函数中的变量 3 console.log(arg); 4 } 5 } 6 function fn(arg){ 7 obj.method(arg); 8 } 9 fn("test"); //test
![](/assets/blank.gif)
转载于:https://www.cnblogs.com/jRoger/articles/2572707.html
[转]JavaScript事件(Event)相关推荐
- JavaScript事件——event对象事件冒泡 阻止默认行为事件捕获
event对象 用来获取事物的详细信息:鼠标位置.键盘按键 e.clientX 鼠标距离元素所在的X轴(左边)位置 e.clientY 鼠标距离元素所在的Y轴(顶部)位置 (左上角为0,0点) 获取e ...
- javascript事件与event对象的属性
javascript事件列表解说 事件 浏览器支持 解说 一般事件 onclick IE3.N2 鼠标点击时触发此事件 ondblclick IE4.N4 鼠标双击时触发此事件 onmousedown ...
- JAVA script 循环 图片_深入分析JavaScript 事件循环(Event Loop)
事件循环(Event Loop),是每个JS开发者都会接触到的概念,但是刚接触时可能会存在各种疑惑. 众所周知,JS是单线程的,即同一时间只能运行一个任务.一般情况下这不会引发问题,但是如果我们有一个 ...
- JavaScript之event事件
目录 1:事件驱动1 2:事件分类2 3:事件对象event3 4:关于鼠标事件对象属性3 应用:5 5:关于键盘事件对象的属性6 6:目标事件源对象7 7. 事件冒泡7 应用:8 CSS模拟下拉菜单 ...
- javascript --- 事件托付
javascript 之 事件托付 长处:1.提高性能(仅仅须要对父级进行操作,子节点相同会拥有其相关属性和方法) 2.对于新加入的事件.也让其拥有父级事件的属性 <!doctype html& ...
- 【探讨】javascript事件机制底层实现原理
前言 又到了扯淡时间了,我最近在思考javascript事件机制底层的实现,但是暂时没有勇气去看chrome源码,所以今天我来猜测一把 我们今天来猜一猜,探讨探讨,javascript底层事件机制是如 ...
- javaScript事件(二)事件处理程序
一.事件 二.事件流 以上内容见:javaScript事件(一)事件流 三.事件处理程序 前面提到,事件是用户或浏览器自身执行的某种动作,如click,load和mouseover都是事件的名字.响应 ...
- javascript 事件对象
btn.onclick = function (event) {// event 就是事件对象var e = event || window.event; // window.event是兼容低版本I ...
- JavaScript事件详解-jQuery的事件实现(三)
正文 本文所涉及到的jQuery版本是3.1.1,可以在压缩包中找到event模块.该篇算是阅读笔记,jQuery代码太长.... Dean Edward的addEvent.js 相对于zepto的e ...
最新文章
- 触类旁通,经典面试题最长公共子序列应该这么答
- FFmpeg windows软件开发环境搭建
- Windows保护模式学习笔记(六)—— 10-10-12分页
- 构建第一个Flex的Mobile APP
- BZOJ 1997: [Hnoi2010]Planar( 2sat )
- 前端之旅,做一点有回报的事情
- 2009年5月14日
- mysql统计各部门人数_2021各省份电网报名人数统计!会不会比考研还难?有些省份人数还就多的离谱了。。。...
- (转)淘淘商城系列——内容管理
- 数学公式的规约(reduce)和简化(simplify)
- linux mysql 备份 压缩_Linux下mysql定时备份压缩
- Hbase官方文档中文版
- win7u盘修复计算机教程视频,钻研U盘修复工具使用教程
- 逃离or逃避:过年后,你还回不回大城市?
- 蚁群算法(实验分析)
- [天池竞赛系列] 历届天池竞赛答辩PPT和视频
- 马原(2023版)导论笔记
- mysql left用法
- 转:变种挖矿蠕虫问题解决
- 消除win7正版验证
热门文章
- ResNet到底深不深?
- Python中的random库
- 复练-面试的科技树-我是谁、我喜欢、我能够
- 源码安装mysql 5.1_Linux环境下源码编译安装MySQL5.1
- linus开启snmp_【snmp】Linux开启snmp及查询
- linux nginx 安装
- 人工智能人才缺口巨大,是否要从大学生抓起?
- gc机制 php7_PHP7垃圾回收机制详解(附GC处理完整流程图)
- VC++ HIDAPI实现USB数据读写
- Dell Latitude 3490 使用 UEFI+GPT 安装 Win7 x64