JS 事件与事件对象小结
JavaScript与HTML之间的交互是通过事件来实现的。IE9,chrome,Firefox,Opera,Safari均实现了DOM2级规范中定义的标准DOM事件,而IE8和IE8以下版本仍然保留专有的事件处理方式。
一些基本概念:
- 事件:是文档或浏览器窗口中发生的一些特定的交互瞬间。
- 事件流:描述的是页面中接受事件的顺序。事件捕获 --> 事件目标 --> 事件冒泡
- 事件冒泡:事件开始时由最具体的元素接收,然后逐级向上传播到较为不具体的节点(document).
- 事件捕获:事件开始时由不太具体的节点先接收事件,然后向下传播到最具体的节点。
而js中事件监听方法总共有三种,分别如下所示:
- element.addEventListener(type, listener[, useCapture]); // IE6~8不支持,支持事件冒泡和捕获
- element.attachEvent(’on’ + type, listener); // IE6~10,IE11不支持,只支持事件冒泡
- element[’on’ + type] = function(){} // 所有浏览器,只支持事件冒泡,不支持对同一个元素的同一个事件注册多个事件监听器
我们把事件绑定以及事件解绑封装成为一个函数,兼容浏览器,包括IE6及以上
// 事件绑定
function addEvent(element, eType, handle, bol) {
if(element.addEventListener){ //如果支持addEventListener
element.addEventListener(eType, handle, bol);
}else if(element.attachEvent){ //如果支持attachEvent
element.attachEvent("on"+eType, handle);
}else{ //否则使用兼容的onclick绑定
element["on"+eType] = handle;
}
}
function removeEvent(element, eType, handle, bol) {
if(element.addEventListener){
element.removeEventListener(eType, handle, bol);
}else if(element.attachEvent){
element.detachEvent("on"+eType, handle);
}else{
element["on"+eType] = null;
}
}
不是所有的事件都能冒泡,例如:blur、focus、load、unload,
事件对象
在触发DOM上的某个事件时,会产生一个事件对象event。这个对象中包含着所有与事件有关的信息。包括导致事件的元素,事件的类型以及其他与特定事件相关的信息。
- 支持至少DOM2级的浏览器所有事件的事件对象,都会有的成员。
属性方法 | 类型 | 读写 | 说明 |
---|---|---|---|
bubbles | Blooean | 只读 | 表明事件是否冒泡 |
stopPropagation() | Function | 只读 | 取消事件的进一步捕获或冒泡,如果bubbels为true,则可以使用这个方法 |
cancelable | Blooean | 只读 | 表明是否可以取消事件的默认行为 |
preventDefault() | Function | 只读 | 取消事件的默认行为,如果cancelable为true,则可以使用这个方法 |
currentTarget | Element | 只读 | 其事件处理程序当前正在处理事件的那个元素 |
target | Element | 只读 | 事件的目标 |
detail | Integar | 只读 | 与事件相关的细节信息 |
eventPhase | Integar | 只读 | 调用事件处理程序的阶段:1表示捕获阶段2表示处于目标3表示冒泡阶段 |
trusted | Blooean | 只读 | 为true表示事件是浏览器生成的,为false表示事件是由开发人员通过js创建的 |
type | String | 只读 | 被触发的事件的类型 |
view | AbstractView | 只读 | 与事件关联的抽象视图。等同于发生事件的window对象 |
注意:
currentTarget
: this对象始终等于他的值,随着事件冒泡或者捕获,他得值等于捕获或冒泡到的上级元素的值。target
:只包含事件的实际目标。
- IE中的事件对象
在IE8及其以前版本的浏览器是不兼容DOM2级的,但是还是可以使用dom0级的方法添加事件处理程序。
属性方法 | 类型 | 读写 | 说明 |
---|---|---|---|
cancelBubble | Blooean | 读写 | 默认值为false,但将其设置为true就可以取消事件冒泡,与DOM中stopPropagation()的方法作用相同 |
returnvalue | Blooean | 读写 | 默认值为true,但将其设置为fasle,就可以取消事件的默认行为,与DOM中的preventDefault()方法的作用相同 |
srcElement | Element | 只读 | 事件的目标,与DOM中的target属性相同 |
type | String | 只读 | 被触发的事件类型 |
- 跨浏览器的事件对象
这是一个通用的事件侦听函数,看代码就会懂很多问题!
var EventUtil={
getEvent:function(event){
return event||window.event;
},
getTarget:function(event){
return event.target||event.srcElement;
},
preventDefault:function(){
if(event.preventDefault){
event.preventDefault();
}else{
event.returnValue=false;
}
},
stopPropagation:function(){
if(event.stopPropagation){
event.stopPropagation();
}else{
event.cancelBubble=true;
}
},
addHandler:function(element,type,handler){
if(element.addEventListener){
element.addEventListener(type,handler,false);
}else if(element.attachEvent){
element["e"+type]=function(){
handler.call(element)
}
element.attachEvent("on"+type,element["e"+type]);
}else{
element["on"+type]=handler;
}
},
removeHandler:function(element,type,handler){
if(element.removeEventListener){
element.removeEventListener(type,handler,false);
}else if(element.detachEvent){
element.detachEvent("on"+type,element["e"+type]);
element["e"+type]=null;
}else{
element["on"+type]=null;
}
} };
JS 事件与事件对象小结的更多相关文章
- js中的事件,内置对象,正则表达式
[JS中的事件分类] 1.鼠标事件: click/dbclick/mouseover/mouseout/mousemove/mousedown/mouseup 2.键盘事件: keydown: 键盘按 ...
- JS中的事件&对象
一.JS中的事件 (一)JS中的事件分类 1.鼠标事件 click/dblclick/onmouseover/onmouseout 2.HTML事件 onload/onscroll/onsubmit/ ...
- JS基础--函数与BOM、DOM操作、JS中的事件以及内置对象
前 言 絮叨絮叨 这里是JS基础知识集中讲解的第三篇,也是最后一篇,三篇JS的基础,大多是知识的罗列,并没有涉及更难得东西,干货满满!看完这一篇后,相信许多正在像我一样正处于初级阶段的同学, ...
- python 全栈开发,Day55(jQuery的位置信息,JS的事件流的概念(重点),事件对象,jQuery的事件绑定和解绑,事件委托(事件代理))
一.jQuery的位置信息 jQuery的位置信息跟JS的client系列.offset系列.scroll系列封装好的一些简便api. 一.宽度和高度 获取宽度 .width() 描述:为匹配的元素集 ...
- js笔记19 事件对象
1.常用的事件 onmouseover onmouseout onmousedown onmousemove onmouseup onclick onchange onfocus o ...
- js事件处理、事件对象
事件类型分类: 1 添加在html结构中的事件 <div id="div1" onclick="alert('append click event in html' ...
- 【js】event(事件对象)详解
1.事件对象 Event 对象代表事件的状态,比如事件在其中发生的元素.键盘按键的状态.鼠标的位置.鼠标按钮的状态. 什么时候会产生Event 对象呢? 例如: 当用户单击某个元素的时候,我们给这个元 ...
- JS HTML DOM 事件对象(onclick、onmouseenter)
HTML DOM 事件允许Javascript在HTML文档元素中注册不同事件处理程序. 事件通常与函数结合使用,函数不会在事件发生前被执行! (如用户点击按钮). HTML DOM 事件 DOM: ...
- JS事件-对象监视事件,事件触发函数
写在前面: 一句话作为本文的核心思想:对象监视事件,事件触发函数: (一)事件 1.事件分类 (1)鼠标事件 click() 鼠标单击 dblclick() ...
随机推荐
- 我的PHP之旅--数据库连接MySQL服务器,添加 删除 查询
PHP连接MySQL服务器 连接MySQL的方法:mysql_connect(); 语法:resource $link = mysql_connect($hostname, $username, $p ...
- [Linux发行版] 常见Linux系统下载
本专题页汇总最受欢迎的Linux发行版基本介绍和下载地址,如果您是一位刚接触Linux的新手,这里的介绍可能对您有所帮助,如果您是以为Linux使用前辈,也可以在评论处留下您宝贵意见和经验,以便让更多 ...
- hdu 1043 pku poj 1077 Eight (BFS + 康拓展开)
http://acm.hdu.edu.cn/showproblem.php?pid=1043 http://poj.org/problem?id=1077 Eight Time Limit: 1000 ...
- Oracle11g用户密码过期
今天一早来了,发现部署的网站访问报500,看日志,显示数据库连不上.然后我用sqldeveloper登录同样登不上,于是想到了之前碰到过的一个问题,Oralce11g的新特性:密码180天自动过期.随 ...
- 调色板QPalette类用法详解(附实例、源码)
http://blog.csdn.net/rl529014/article/details/51589096
- C++默认构造函数
原文链接:http://wenku.baidu.com/link?url=Qh59sZlrT7dAZwjkKqhUiUU2yq2GZams7wEQ9ULkYC7FgArX5adcp1EXVw_jqjf ...
- hdu3006之位压缩
The Number of set Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others ...
- OSFM Tables
OSFM - Oracle Shop Floor Management 1. (N) Shop Floor Manager > Lot Based Jobs (B: New) Status: U ...
- sql 不同server間寫入數據
select * from sys.servers sp_dropserver @server =N'' sp_dropserver '' ,'droplogins' EXEC master.dbo. ...
- iOS上百度输入法引起的问题
/* UIKeyboardWillShowNotification 通知下的数据 百度 { UIKeyboardAnimationCurveU ...