js--事件对象的理解1
在触发DOM上的某个事件时,会产生一个事件对象event。这个对象中包含着所有与事件有关的信息。包括导致事件的元素,事件的类型以及其他与特定事件相关的信息。
- 举例
鼠标操作导致的事件对象中,会包含鼠标位置的信息,
键盘操作导致的事件对象中,会包含按下的键有关的信息,
所有浏览器都支持event对象,event对象会传入DOM0级,DOM2级,HTML指定,的事件处理程序中,但支持的方式不同,所以也会涉及跨浏览器的部分。
- 兼容DOM的浏览器
function handler(){
alert(event.type);
};
EventUtil.addHandler(btn,'click',handler);//接上篇笔记event:在支持至少DOM2级的浏览器内,无论使用html特性指定,dom0级,2级,该对象都是该事件内置对象,可以在事件处理函数内直接使用。
this:在支持至少DOM2级的浏览器内,无论使用html特性指定,dom0级,2级,都是指向当前正在处理事件的那个元素。- 列举所有事件的事件对象,都会有的成员。
属性方法 | 类型 | 读写 | 说明 |
---|---|---|---|
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
:只包含事件的实际目标。 type
可以利用type属性为一个元素同时添加多类事件处理程序。
采用dom0级试试var btn=document.getElementById('d1');
var handler=function(){
switch(event.type){
case "click":
alert("clicked");
break; case "mouseover":
event.target.style.background='red';
break;
case "mouseout":
event.target.style.background='yellow';
break;
}
};
btn.onclick=handler;
btn.onmouseover=handler;
btn.onmouseout=handler;- cancelable、preventDefault()
只有cancelable为true时,才可以使用preventDefault()方法,来取消其默认行为。<a href="http://www.baidu.com/" id="myherf">百度</a>
var Link=document.getElementById("myherf");
Link.onclick=function(){
event.preventDefault();
}这样单击百度时,并不会跳转到百度的页面。
- stopPropagation()
立即停止事件在dom层次中的传播,即取消进一步的事件捕获或冒泡。function handler(){
alert(event.type);
event.stopPropagation();
}; - eventPahse
用来确定事件当前位于事件流的哪个阶段var btn=document.getElementById('d1');//body内的div
var wrap=document.getElementById('wrap');//body
function handler(){
alert(event.eventPhase)
};
//单击btn
btn.addEventListener('click',handler,false);//2处于目标对象
wrap.addEventListener('click',handler,false);//3冒泡阶段
wrap.addEventListener('click',handler,true);//1捕获event对象只有在事件处理程序执行期间,才会存在,执行完毕即销毁。
- 成员中有两个成员比较相似:
- IE中的事件对象
在IE8及其以前版本的浏览器是不兼容DOM2级的,但是还是可以使用dom0级的方法添加事件处理程序。- event
- dom0级方法中:
var div=document.getElementById("test");
div.onclick=function(){
var event=window.event;//event为window对象
alert(event.type);
} - 使用IE的专属添加事件的方法,event对象作为事件处理程序的内部对象。可以直接使用event.type。
- html指定:event对象同样也包含于创建他的事件相关的属性和方法。
- dom0级方法中:
- this
- dom0级方法中
this等于正在处理事件的那个元素。 - 使用IE的专属
this等于全局对象 - html指定
如果是在标签上直接使用this,那么等于正在处理事件的那个元素。如果是使用标签上指定函数,那么函数内的this指的是window。
- dom0级方法中
- event
看到了分歧,结果是必然要编写一个可以跨浏览器的。
- IE的event包含的对象与方法
属性方法 | 类型 | 读写 | 说明 |
---|---|---|---|
cancelBubble | Blooean | 读/写 | 默认值为false,但将其设置为true就可以取消事件冒泡,与DOM中stopPropagation()的方法作用相同 |
returnvalue | Blooean | 读/写 | 默认值为true,但将其设置为fasle,就可以取消事件的默认行为,与DOM中的preventDefault()方法的作用相同 |
srcElement | Element | 只读 | 事件的目标,与DOM中的target属性相同 |
type | String | 只读 | 被触发的事件类型 |
- returnvalue
var div=document.getElementById("test");
div.onclick=function(){
window.event.returnValue=false;
}但是没有办法判定默认事件能否被取消。
- cancelBubble
var div=document.getElementById("test");
div.onclick=function(){
alert('ok')
window.event.cancelBubble=true;
}因为IE8及以前只支持冒泡所以只能取消冒泡。
- returnvalue
跨浏览器的事件对象
这个面试会问道的,写一个通用的事件侦听函数!就写下面的就可以!bingo!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--事件对象的理解1的更多相关文章
- JavaScript学习06 JS事件对象
JavaScript学习06 JS事件对象 事件对象:当事件发生时,浏览器自动建立该对象,并包含该事件的类型.鼠标坐标等. 事件对象的属性:格式:event.属性. 一些说明: event代表事件的状 ...
- JS事件对象,筋斗云导航练习,跟随鼠标练习,放大镜练习,进度条练习
JS事件对象,筋斗云导航练习,跟随鼠标练习,放大镜练习,进度条练习 btn.onclick = function(event) { 语句 } 其中event就是事件对象,在这个方法中指向的对象是onc ...
- JS—事件对象
在触发DOM上的某个事件时,会产生一个事件对象event.这个对象中包含着所有与事件有关的信息.包括导致事件的元素,事件的类型以及其他与特定事件相关的信息. 举例鼠标操作导致的事件对象中,会包含鼠标位 ...
- JS事件对象与事件委托
事件对象 包含事件相关的信息,如鼠标.时间.触发的DOM对象等 js默认将事件对象封装好,并自动的以参数的形式,传递给事件处理函数的第1个参数,如下: document.getElementsByTa ...
- JS 事件对象和事件冒泡
1.事件对象 js的事件对象中保存了当前被触发事件的一些相关的属性信息,如事件源.事件发生时的鼠标位置.事件按键等. 事件对象的获取方法: IE中可以window.event直接获取,而Firefox ...
- JS:事件对象1
一,this关键字和上下文 var box = document.getElementById("box");. 普通的函数如果没有给他传递参数,函数本身是没有参数的. test( ...
- js事件对象--DOM中的事件对象/IE中的事件对象/跨浏览器的事件对象
事件对象 在触发DOM上的某个事件时,会产生一个事件对象event,这个对象中包含着所有与事件有关的信息.包括导致事件的元素.事件的类型,以及其他与特定事件相关的信息.例如,鼠标操作导致的事件对 ...
- js事件对象
哎,事件也有对象呦.程序员一直在讲对象对象,那么,过年是不是该带个对象回家呢?好了,既然事件有对象,承认这个事实吧!哈哈,那么,其就有属性,接下来,就放个 例子来讲讲,顺便把常用的属性也添加进去.. ...
- js 事件对象
/* 事件绑定的格式: 元素节点.on + 事件类型 = function(){ } 元素节点 事件类型 on+事件类型:事件处理函数 [注]上述三者一绑定:生成一个新的事件对象. [注]触发事件以后 ...
- js 事件对象event
在触发DOM上的某个事件时,会产生一个事件对象event.这个对象中包含着所有与事件有关的信息.包括导致事件的元素,事件的类型以及其他与特定事件相关的信息. <body> <a hr ...
随机推荐
- servlet的跳转
首先要有RequestDispatcher对象(由request.getRequestDispatcher(根目录)注意不用谢后缀名java RequestDispatcher dispatcher= ...
- Date类型常用概念及方法总结(1)
Date类型使用UTC(国际协调时间)1970年1月1日零时开始经过的毫秒数来保存时间. (1)创建当前日期 调用Date不传递参数的情况下,创建的新对象自动获得当前日期和时间 ...
- JavaScript实现360度全景图片展示效果
全景拍摄:所谓“全景拍摄”就是将所有拍摄的多张图片拼成一张全景图片.它的基本拍摄原理是搜索两张图片的边缘部分,并将成像效果最为接近的区域加以重合,以完成图片的自动拼接.现在的智能手机也基本带这个功能. ...
- 手机端rem自适应布局实例
首先要书写核心js代码,控制住页面的初始大小:我是以750px(即iPhone6)的标准,设置font-size:100px:<script> (function (doc, ...
- wpf xmal基础
1.名称空间的引用 比如想使用System.Windows.Controls名称空间 首先需要把改名称空间所在的程序集presentationFramework.dll引用到项目里 然后在根元素的起始 ...
- Tomcat内存溢出
Tomcat内存溢出的三种情况及解决办法分析 转载于网络 Tomcat内存溢出的原因 在生产环境中tomcat内存设置不好很容易出现内存溢出.造成内存溢出是不一样的,当然处理方式也不一样. 这里根据 ...
- ubuntu 14.04—解决软件中心进度条卡死的问题
软件中心下载安装软件进度条卡住了,这时候解决方法为: 先解锁: sudo rm -rf /var/lib/dpkg/lock 如果此时开启软件中心,发现进度还在, 那么我们需要找到相关的进程关闭他,使 ...
- php笔记(六)PHP类与对象之对象接口
接口的实现 <?php //interface 关键字用于定义一个接口 interface ICanEat{ //接口里面的方法不需要实现 public function eat($food); ...
- wampserver使用过程中遇到的问题及相关配置
wampserver集合了Apache+PHP+Mysql 下载地址:点这里 安装过程很方便,一直点下一步就行,中间会提示选择默认的浏览器及文件编辑器 起因: 使用过程中提示: In the http ...
- svn添加新文件自动忽略
背景:做项目,用的客户端TortoiseSVN1.8,发现新建的文件,不是问号(?),而是自动忽略的减号,提交的时候也确实没有,说明不是符号混乱,确实是被忽略了,网上找了解决方案记录如下: 查看svn ...