javascript 事件处理程序介绍


Posted in Javascript onJune 27, 2012

1、DOM0级事件处理程序
将一个函数值给一个事件处理程序属性。
例如:

var btn = document.getElementById("myBtn"); 
btn.onclick = funtion(){ 
alert(this.id); //"myBtn" 
}

删除事件,btn.onclick = null;
--------------------------------------------------------------------------------
2、DOM2级事件处理程序
先介绍,“DOM2级事件”定义的两个方法,用于处理指定和删除事件处理程序的操作:
addEventListener()
removeEventListener()
所有DOM节点都包含这两个方法,接受3个参数:处理事件名、作为事件处理程序的函数、一个布尔值。
最后的布尔值参数,true:表示在捕获阶段调用事件处理程序;false:表示在冒泡阶段调用事件处理程序。\
var btn = document.getElementById("myBtn"); 
btn.addEventListener("click",funciton(){ 
alert(this.id); 
},false);

用DOM2级方法添加事件处理程序主要的好处是可以添加多个事件处理程序。
例如:
var btn = document.getElementById("myBtn"); 
btn.addEventListener("click",funciton(){ 
alert(this.id); 
},false); 
btn.addEventListener("click",funciton(){ 
alert(“Hello World!”); 
},false);

这两个事件会按照顺序触发。
通过 addEventListener()添加的事件只能用removeEventListener()移除。移除时传入的参数需与添加时的参数一致,也就是说匿名函数将无法移除。
var btn = document.getElementById("myBtn"); 
var handler = function(){ 
alert(this.id); 
}; 
btn.addEventListener("click" , handler , false); 
btn.removeEventListener("click", handler , false);

大多数情况下,都是将事件处理程序添加到事件流的冒泡阶段,以便兼容各种浏览器。
firefox、safari、chrome、opera支持DOM2级事件处理程序。
--------------------------------------------------------------------------------
3、IE事件处理程序
IE实现了与DOM中类似的两个方法:
attachEvent()
detachEvent()
这两个方法都接受两个参数:事件处理程序名称和事件处理程序函数。
由于IE只支持时间冒泡,所以通过attachEvent() 添加的事件处理程序都会被添加到冒泡阶段。
例如:
var btn = document.getElementById("myBtn"); 
btn.attachEvent("onclick" , function(){ 
alert("Clicked"); 
})

注意,attachEvent()的第一个参数是“onclick”,而非 “click”。
IE的attachEvent()与DOM0的addEventListener()的主要区别是事件处理程序的作用域。
DOM0级方法,事件处理程序会在所属元素的作用域内运行;
attachEvent()方法,事件处理程序会在全局作用域中运行,因此 this等于 window。
attachEvent()也可以为一个元素添加多个事件处理程序。
var btn = document.getElementById("myBtn"); 
btn.attachEvent(”onclick“ , function(){ 
alert("clicked"); 
}) 
btn.attachEvent(”onclick“ , function(){ 
alert("Hello World!"); 
})

与DOM方法不同的是,这些事件处理程序不是以添加顺序执行,而是以相反的方向执行。
detachEvent() 的用法与removeEventListener()的用法一样。
--------------------------------------------------------------------------------
4、跨浏览器的事件处理程序
var EventUtil = { 
addHandler : function(element, type , handler){ 
if (element.addEventListener){ 
element.addEventListener(type, handler, false); 
} else if ( element.attachEvent){ 
element.attachEvent("on" + type , handler) 
} else { 
element["on" + type] = handler; 
} 
}, 
removeHandler: function( element , type , handler){ 
if ( element.removeElementListener) { 
element.removeElementListener( type , handler , flase); 
} else if ( element.detachEvent) { 
element.detachEvent ( "on" + type , handler) 
} else { 
element["on" + type] = handler; 
} 
} 
}
Javascript 相关文章推荐
超简单JS二级、多级联动的简单实例
Feb 18 Javascript
js 判断控件获得焦点的示例代码
Mar 04 Javascript
Jquery实现侧边栏跟随滚动条固定(兼容IE6)
Apr 02 Javascript
JavaScript动态改变HTML页面元素例如添加或删除
Aug 10 Javascript
PHP+jQuery+Ajax+Mysql如何实现发表心情功能
Aug 06 Javascript
javascript 继承学习心得总结
Mar 17 Javascript
JS在Chrome浏览器中showModalDialog函数返回值为undefined的解决方法
Aug 03 Javascript
轻松掌握JavaScript策略模式
Aug 25 Javascript
angularJS Provider、factory、service详解及实例代码
Sep 21 Javascript
SpringMVC简单整合Angular2的示例
Jul 31 Javascript
微信小程序遍历Echarts图表实现多个饼图
Apr 25 Javascript
vue不操作dom实现图片轮播的示例代码
Dec 18 Javascript
jquery 获取自定义属性(attr和prop)的实现代码
Jun 27 #Javascript
IE事件对象(The Internet Explorer Event Object)
Jun 27 #Javascript
跨浏览器的事件对象介绍
Jun 27 #Javascript
UI Events 用户界面事件
Jun 27 #Javascript
浅谈Javascript鼠标和滚轮事件
Jun 27 #Javascript
浅谈Javascript事件模拟
Jun 27 #Javascript
JS时间选择器 兼容IE6,7,8,9
Jun 26 #Javascript
You might like
php echo 输出字符串函数详解
2010/05/13 PHP
PHP冒泡排序算法代码详细解读
2011/07/17 PHP
php读取3389的脚本
2014/05/06 PHP
php计算税后工资的方法
2015/07/28 PHP
php实现留言板功能(会话控制)
2017/05/23 PHP
Mozilla 表达式 __noSuchMethod__
2009/04/05 Javascript
js实现的真正的iframe高度自适应(兼容IE,FF,Opera)
2010/03/07 Javascript
javascript判断机器是否联网的2种方法
2013/08/09 Javascript
js读写cookie实现一个底部广告浮层效果的两种方法
2013/12/29 Javascript
轻松实现js图片预览功能
2016/01/18 Javascript
jQuery操作Table技巧大汇总
2016/01/23 Javascript
JavaScript中文件上传API详解
2016/04/01 Javascript
JS表格组件神器bootstrap table使用指南详解
2017/04/12 Javascript
BootStrap模态框不垂直居中的解决方法
2017/10/19 Javascript
nuxt.js 缓存实践
2018/06/25 Javascript
vue中keep-alive,include的缓存问题
2019/11/26 Javascript
[52:03]Secret vs VG 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
Python字符转换
2008/09/06 Python
Python中的__SLOTS__属性使用示例
2015/02/18 Python
Python中str.join()简单用法示例
2018/03/20 Python
详解python之协程gevent模块
2018/06/14 Python
Python做智能家居温湿度报警系统
2018/09/25 Python
Python 基于jwt实现认证机制流程解析
2020/06/22 Python
python 使用elasticsearch 实现翻页的三种方式
2020/07/31 Python
Python 实现PS滤镜的旋涡特效
2020/12/03 Python
python 实现ping测试延迟的两种方法
2020/12/10 Python
详解canvas绘制网络字体几种方法
2019/08/27 HTML / CSS
香港永安旅游网:Wing On Travel
2017/04/10 全球购物
英国最大的宝石首饰超市:QP Jewellers
2018/09/23 全球购物
保密普查工作实施方案
2014/02/25 职场文书
市场营销调查计划书
2014/05/02 职场文书
工作自我评价范文
2015/03/05 职场文书
2016高考寄语或鼓励的话语
2015/12/04 职场文书
PostgreSQL将数据加载到buffer cache中操作方法
2021/04/16 PostgreSQL
python通过opencv调用摄像头操作实例分析
2021/06/07 Python
Pyhton爬虫知识之正则表达式详解
2022/04/01 Python