一、事件流
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属性相同

四、跨浏览器的事件对象
 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 }

五、事件委托

事件委托: 就是利用事件冒泡,把事件注册到目标元素的更高层级元素上,用来减少页面事件处理程序,提高页面性能

如:HTML
1 <ul id="ul">
2     <li id="li1"></li>
3     <li id="li2"></li>
4     <li id="li3"></li>
5 </ul>

JavaScript
 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 });

六、命名空间(对象)中的变量访问

命名空间中的变量可以直接访问全局中的变量,但是不能访问其他(函数)作用域中的变量,只能通过传递参数来访问

1、错误代码:
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

不能直接访问其他作用域中的变量

2、访问全局变量:
1 var arg = "test";
2 var obj = {
3     method: function(){
4         console.log(arg);  //可以直接访问全局变量arg
5     }
6 }
7 obj.method(); //test

3、传递参数来访问变量:
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
转自:http://www.cnblogs.com/yangjunhua/archive/2012/06/29/2570256.html

转载于:https://www.cnblogs.com/jRoger/articles/2572707.html

[转]JavaScript事件(Event)相关推荐

  1. JavaScript事件——event对象事件冒泡 阻止默认行为事件捕获

    event对象 用来获取事物的详细信息:鼠标位置.键盘按键 e.clientX 鼠标距离元素所在的X轴(左边)位置 e.clientY 鼠标距离元素所在的Y轴(顶部)位置 (左上角为0,0点) 获取e ...

  2. javascript事件与event对象的属性

    javascript事件列表解说 事件 浏览器支持 解说 一般事件 onclick IE3.N2 鼠标点击时触发此事件 ondblclick IE4.N4 鼠标双击时触发此事件 onmousedown ...

  3. JAVA script 循环 图片_深入分析JavaScript 事件循环(Event Loop)

    事件循环(Event Loop),是每个JS开发者都会接触到的概念,但是刚接触时可能会存在各种疑惑. 众所周知,JS是单线程的,即同一时间只能运行一个任务.一般情况下这不会引发问题,但是如果我们有一个 ...

  4. JavaScript之event事件

    目录 1:事件驱动1 2:事件分类2 3:事件对象event3 4:关于鼠标事件对象属性3 应用:5 5:关于键盘事件对象的属性6 6:目标事件源对象7 7. 事件冒泡7 应用:8 CSS模拟下拉菜单 ...

  5. javascript --- 事件托付

    javascript 之 事件托付 长处:1.提高性能(仅仅须要对父级进行操作,子节点相同会拥有其相关属性和方法) 2.对于新加入的事件.也让其拥有父级事件的属性 <!doctype html& ...

  6. 【探讨】javascript事件机制底层实现原理

    前言 又到了扯淡时间了,我最近在思考javascript事件机制底层的实现,但是暂时没有勇气去看chrome源码,所以今天我来猜测一把 我们今天来猜一猜,探讨探讨,javascript底层事件机制是如 ...

  7. javaScript事件(二)事件处理程序

    一.事件 二.事件流 以上内容见:javaScript事件(一)事件流 三.事件处理程序 前面提到,事件是用户或浏览器自身执行的某种动作,如click,load和mouseover都是事件的名字.响应 ...

  8. javascript 事件对象

    btn.onclick = function (event) {// event 就是事件对象var e = event || window.event; // window.event是兼容低版本I ...

  9. JavaScript事件详解-jQuery的事件实现(三)

    正文 本文所涉及到的jQuery版本是3.1.1,可以在压缩包中找到event模块.该篇算是阅读笔记,jQuery代码太长.... Dean Edward的addEvent.js 相对于zepto的e ...

最新文章

  1. 触类旁通,经典面试题最长公共子序列应该这么答
  2. FFmpeg windows软件开发环境搭建
  3. Windows保护模式学习笔记(六)—— 10-10-12分页
  4. 构建第一个Flex的Mobile APP
  5. BZOJ 1997: [Hnoi2010]Planar( 2sat )
  6. 前端之旅,做一点有回报的事情
  7. 2009年5月14日
  8. mysql统计各部门人数_2021各省份电网报名人数统计!会不会比考研还难?有些省份人数还就多的离谱了。。。...
  9. (转)淘淘商城系列——内容管理
  10. 数学公式的规约(reduce)和简化(simplify)
  11. linux mysql 备份 压缩_Linux下mysql定时备份压缩
  12. Hbase官方文档中文版
  13. win7u盘修复计算机教程视频,钻研U盘修复工具使用教程
  14. 逃离or逃避:过年后,你还回不回大城市?
  15. 蚁群算法(实验分析)
  16. [天池竞赛系列] 历届天池竞赛答辩PPT和视频
  17. 马原(2023版)导论笔记
  18. mysql left用法
  19. 转:变种挖矿蠕虫问题解决
  20. 消除win7正版验证

热门文章

  1. ResNet到底深不深?
  2. Python中的random库
  3. 复练-面试的科技树-我是谁、我喜欢、我能够
  4. 源码安装mysql 5.1_Linux环境下源码编译安装MySQL5.1
  5. linus开启snmp_【snmp】Linux开启snmp及查询
  6. linux nginx 安装
  7. 人工智能人才缺口巨大,是否要从大学生抓起?
  8. gc机制 php7_PHP7垃圾回收机制详解(附GC处理完整流程图)
  9. VC++ HIDAPI实现USB数据读写
  10. Dell Latitude 3490 使用 UEFI+GPT 安装 Win7 x64