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实现随机返回数组的一个元素
Aug 13 Javascript
在多个页面使用同一个HTML片段《续》
Mar 04 Javascript
Jquery仿淘宝京东多条件筛选可自行结合ajax加载示例
Aug 28 Javascript
JS将制定内容复制到剪切板示例代码
Feb 11 Javascript
聊一聊JS中this的指向问题
Jun 17 Javascript
JS动态的把左边列表添加到右边的实现代码(可上下移动)
Nov 17 Javascript
详解基于Bootstrap+angular的一个豆瓣电影app
Jun 26 Javascript
jQuery实现文字超过1行、2行或规定的行数时自动加省略号的方法
Mar 28 jQuery
js实现页面多个日期时间倒计时效果
Jun 20 Javascript
基于js实现复制内容到操作系统粘贴板过程解析
Oct 11 Javascript
vue中destroyed方法的使用说明
Jul 21 Javascript
html实现随机点名器的示例代码
Apr 02 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代码包装修正版
2008/03/15 PHP
几个php应用技巧
2008/03/27 PHP
晋城吧对DiscuzX进行的前端优化要点
2010/09/05 PHP
php预定义变量使用帮助(带实例)
2013/10/30 PHP
PHP语法小结之基础和变量
2015/11/22 PHP
PHP图像识别技术原理与实现
2016/10/27 PHP
javascript 支持链式调用的异步调用框架Async.Operation
2009/08/04 Javascript
JavaScript call apply使用 JavaScript对象的方法绑定到DOM事件后this指向问题
2011/09/28 Javascript
Js动态添加复选框Checkbox的实例方法
2013/04/08 Javascript
jquery插件推荐 jquery.cookie
2014/11/09 Javascript
JavaScript实现鼠标滑过图片变换效果的方法
2015/04/16 Javascript
浅析Node.js中的内存泄漏问题
2015/06/23 Javascript
小心!AngularJS结合RequireJS做文件合并压缩的那些坑
2016/01/09 Javascript
AngularJS bootstrap启动详解及实例代码
2016/09/14 Javascript
jQuery实现Select下拉列表进行状态选择功能
2017/03/30 jQuery
初识NodeJS服务端开发入门(Express+MySQL)
2017/04/07 NodeJs
Angular4实现鼠标悬停3d倾斜效果
2017/10/25 Javascript
react-native fetch的具体使用方法
2017/11/01 Javascript
vue 点击按钮增加一行的方法
2018/09/07 Javascript
详解vuex持久化插件解决浏览器刷新数据消失问题
2019/04/15 Javascript
通过vue手动封装on、emit、off的代码详解
2019/05/29 Javascript
深入了解query和params的使用区别
2019/06/24 Javascript
javascript关于“时间”的一次探索
2019/07/24 Javascript
对python数据切割归并算法的实例讲解
2018/12/12 Python
Python修改文件往指定行插入内容的实例
2019/01/30 Python
python学习——内置函数、数据结构、标准库的技巧(推荐)
2019/04/18 Python
python sorted函数原理解析及练习
2020/02/10 Python
浅谈keras通过model.fit_generator训练模型(节省内存)
2020/06/17 Python
JD Sports澳洲官网:英国领先的运动鞋和运动时尚零售商
2020/02/15 全球购物
当我正在为表建立索引的时候,SQL Server 会禁止对表的访问吗
2014/04/28 面试题
法定代表人证明书
2014/11/28 职场文书
民政局标准版离婚协议书
2014/12/01 职场文书
务虚会发言材料
2014/12/25 职场文书
项目安全员岗位职责
2015/02/15 职场文书
企业团队精神心得体会
2016/01/19 职场文书
如何在CocosCreator里画个炫酷的雷达图
2021/04/16 Javascript