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 相关文章推荐
jquery.cookie.js使用指南
Jan 05 Javascript
js图片轮播效果实现代码
Apr 18 Javascript
jQuery 获取页面li数组并删除不在数组中的key
Aug 02 Javascript
浅谈React 属性和状态的一些总结
Nov 21 Javascript
JS实现焦点图轮播效果的方法详解
Dec 19 Javascript
jquery实现(textarea)placeholder自动换行
Dec 22 Javascript
Bootstarp基本模版学习教程
Feb 01 Javascript
vue-router 学习快速入门
Mar 01 Javascript
JavaScript实现省市县三级级联特效
May 16 Javascript
浅谈Angular HttpClient简单入门
May 04 Javascript
Vue CLI3搭建的项目中路径相关问题的解决
Sep 17 Javascript
express.js中间件说明详解
Mar 19 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使用for语句输出三角形的方法
2015/06/09 PHP
PHP面试常用算法(推荐)
2016/07/22 PHP
php查询及多条件查询
2017/02/26 PHP
PHP如何解决微信文章图片防盗链
2020/12/09 PHP
Extjs学习笔记之四 工具栏和菜单
2010/01/07 Javascript
jQuery获取Radio,CheckBox选择的Value值(示例代码)
2013/12/12 Javascript
js控制浏览器全屏示例代码
2014/02/20 Javascript
将数字转换成大写的人民币表达式的js函数
2014/09/21 Javascript
jQuery选择器源码解读(六):Sizzle选择器匹配逻辑分析
2015/03/31 Javascript
JavaScript中的Math.LN2属性用法详解
2015/06/12 Javascript
jQuery ajax调用后台aspx后台文件的两种常见方法(不是ashx)
2016/06/28 Javascript
canvas仿iwatch时钟效果
2017/03/06 Javascript
关于vue-router路径计算问题
2017/05/10 Javascript
vue-router单页面路由
2017/06/17 Javascript
vue移动端裁剪图片结合插件Cropper的使用实例代码
2017/07/10 Javascript
详解Vue底部导航栏组件
2019/05/02 Javascript
JS实现网站楼层导航效果代码实例
2020/06/16 Javascript
深入Python函数编程的一些特性
2015/04/13 Python
Python实现SMTP发送邮件详细教程
2021/03/02 Python
Python网络编程 Python套接字编程
2017/09/13 Python
python dataframe 输出结果整行显示的方法
2018/06/14 Python
Python 调用 zabbix api的方法示例
2019/01/06 Python
numpy concatenate数组拼接方法示例介绍
2019/05/27 Python
Django用户认证系统 User对象解析
2019/08/02 Python
30秒学会30个超实用Python代码片段【收藏版】
2019/10/15 Python
wxpython多线程防假死与线程间传递消息实例详解
2019/12/13 Python
python函数定义和调用过程详解
2020/02/09 Python
Python常用库Numpy进行矩阵运算详解
2020/07/21 Python
HTML5之SVG 2D入门2—图形绘制(基本形状)介绍及使用
2013/01/30 HTML / CSS
骨干教师申报材料
2014/12/17 职场文书
八一建军节慰问信
2015/02/14 职场文书
保密法制宣传月活动总结
2015/05/07 职场文书
2015年酒店销售部工作总结
2015/07/24 职场文书
如何在Python中创建二叉树
2021/03/30 Python
python树莓派通过队列实现进程交互的程序分析
2021/07/04 Python
关于MySQL临时表为什么可以重名的问题
2022/03/22 MySQL