JavaScript中的事件:事件对象
2012-12-23 10:52
309 查看
在触发DOM上的某个事件时,会产生一个事件对象event,这个对象中包含着所有与事件有关的信息。所有浏览器都支持event事件,但支持方式不同。
一、DOM中的事件对象
兼容DOM的浏览器会将一个event对象传入事件处理程序中,无论使用DOM0级或DOM2级。
event对象包含的部分属性或方法如下:
bubbles:表明事件是否冒泡。
cancelable:表明是否可以取消事件的默认行为。
currentTarget:其事件处理程序当前正在处理事件的那个元素。
defaulPrevented:为true表明已调用preventDefaul()。
eventPhase:调用事件处理程序的阶段。1为捕获,2为“处于目标”,3为冒泡。
preventDefaul():取消事件的默认行为。cancelable为true可用。
stopImmediatePropagation():取消事件的进一步捕获或冒泡。同时阻止任何事件处理程序被调用。
stopPropagation():取消事件的进一步捕获或冒泡。bubbles为true可用。
target:事件目标
在事件处理程序内部,对象this始终等于currentTarget的值,而target则只包含事件的实际目标。如果直接将事件处理程序指定给了目标元素,则这三者的值相同。如:
如果事件处理程序存在于按钮的父节点中,那么这些值是不相同的。如:
上面的代码中,target元素等于按钮元素,是因为它是click事件的真正目标。由于按钮上事件处理程序,所以冒泡到document.body处理。
注意event对象只有在事件处理程序执行期间才存在,程序执行完就会被销毁。
二、IE中的事件对象
与访问DOM中的event对象不同,要访问IE中的event对象有几种不同的方式,取决于指定事件处理程序的方法。
使用DOM0级时:event对象作为window对象的一个属性存在。
使用attachEvent()时:event对象作为参数传入事件处理程序函数中(同时也可以通过window对象来访问event对象,与DOM0级一样)。
看下面例子:
IE的event对象包含的部分属性方法如下:
cancelBubble:默认值为false,将其设为true就可以取消事件冒泡(与DOM中的stopPropagation()方法一样)。
returnValue:默认值为true,将其设为false就可以取消事件的默认行为(与DOM中的preventDefault()方法一样)。
srcElement:事件的目标(与DOM中的target属性相同)。
因为事件处理程序的作用域是根据指定它的方式来确定的,所以不能认为this会始终等于事件目标。因此还是使用event.srcElement比较好。
三、跨浏览器的事件对象
以上代码,在兼容DOM的浏览器中,event变量只是简单地传入和返回。而在IE中,event参数是未定义的,因此就会返回window.event。将这一行代码添加到事件处理程序的开头,就可以确保随时都能使用event对象,而不用担心用户使用什么浏览器。
四、事件处理程序的作用域
在兼容DOM的浏览器中,事件处理程序中的this指向元素本身;
在IE中,使用DOM0级方法,this指向元素本身;而使用attachEvent(),则this===window。
一、DOM中的事件对象
兼容DOM的浏览器会将一个event对象传入事件处理程序中,无论使用DOM0级或DOM2级。
event对象包含的部分属性或方法如下:
bubbles:表明事件是否冒泡。
cancelable:表明是否可以取消事件的默认行为。
currentTarget:其事件处理程序当前正在处理事件的那个元素。
defaulPrevented:为true表明已调用preventDefaul()。
eventPhase:调用事件处理程序的阶段。1为捕获,2为“处于目标”,3为冒泡。
preventDefaul():取消事件的默认行为。cancelable为true可用。
stopImmediatePropagation():取消事件的进一步捕获或冒泡。同时阻止任何事件处理程序被调用。
stopPropagation():取消事件的进一步捕获或冒泡。bubbles为true可用。
target:事件目标
在事件处理程序内部,对象this始终等于currentTarget的值,而target则只包含事件的实际目标。如果直接将事件处理程序指定给了目标元素,则这三者的值相同。如:
var btn=document.getElementById("myBtn"); btn.onclick=function(event){ alert(event.currentTarget===this); //true alert(event.target===this); //true };
如果事件处理程序存在于按钮的父节点中,那么这些值是不相同的。如:
document.body.onclick=function(event){ alert(event.currentTarget===document.body); //true alert(this===document.body); //true alert(event.target===document.getElementById(myBtn); //true };
上面的代码中,target元素等于按钮元素,是因为它是click事件的真正目标。由于按钮上事件处理程序,所以冒泡到document.body处理。
注意event对象只有在事件处理程序执行期间才存在,程序执行完就会被销毁。
二、IE中的事件对象
与访问DOM中的event对象不同,要访问IE中的event对象有几种不同的方式,取决于指定事件处理程序的方法。
使用DOM0级时:event对象作为window对象的一个属性存在。
使用attachEvent()时:event对象作为参数传入事件处理程序函数中(同时也可以通过window对象来访问event对象,与DOM0级一样)。
看下面例子:
//DOM0级 var btn=document.getElementById("myBtn"); btn.onclick=function(){ var event=window.event; alert(event.type); //"click" }; //attachEvent() var btn=document.getElementById("myBtn"); btn.attachEvent("onclick",function(event){ alert(event.type); //"click" });
IE的event对象包含的部分属性方法如下:
cancelBubble:默认值为false,将其设为true就可以取消事件冒泡(与DOM中的stopPropagation()方法一样)。
returnValue:默认值为true,将其设为false就可以取消事件的默认行为(与DOM中的preventDefault()方法一样)。
srcElement:事件的目标(与DOM中的target属性相同)。
因为事件处理程序的作用域是根据指定它的方式来确定的,所以不能认为this会始终等于事件目标。因此还是使用event.srcElement比较好。
三、跨浏览器的事件对象
var EventUtil={ addHandler:function(element,type,handler){ //代码 }, getEvent:function(event){ return event ? event : window.event; }, getTarget:function(event){ return event.target || event.srcElement; }, preventDefault:function(event){ if(event.preventDefault){ event.preventDefault(); }else{ event.returnValue=false; } }, removeHandler:function(element,type,handler){ //代码 }, stopPropagation:function(event){ if(eventstopPropagation){ event.stopPropagation(); }else{ event.cancelBubble=true; } } };
btn.onclick=function(event){ event=EventUtil.getEvent(event); };
以上代码,在兼容DOM的浏览器中,event变量只是简单地传入和返回。而在IE中,event参数是未定义的,因此就会返回window.event。将这一行代码添加到事件处理程序的开头,就可以确保随时都能使用event对象,而不用担心用户使用什么浏览器。
四、事件处理程序的作用域
在兼容DOM的浏览器中,事件处理程序中的this指向元素本身;
在IE中,使用DOM0级方法,this指向元素本身;而使用attachEvent(),则this===window。
相关文章推荐
- 【JavaScript】window对象_event事件对象
- javascript不依赖JS加载顺序事件对象实现
- javascript 事件对象(event 对象)
- JavaScript跨浏览器处理事件方法(封装成对象)
- JavaScript第六章知识点总结——JavaScript常用DHTML对象 Document相关对象 事件处理
- [Javascript]:DOM绑定事件、事件流机制、事件委托、事件对象
- Javascript 事件对象进阶(二)拖拽的应用 - 登录框的拖拽
- JavaScript学习12:事件对象
- javascript event(事件对象)详解
- JavaScript之事件对象
- 如何用Javascript捕获ActiveX对象的事件
- 好好学一遍JavaScript 笔记(九)——事件处理函数/监听函数/事件对象
- javascript onclick事件中传递对象参数和JavaScript中对象字符串转换
- javascript基础:事件3事件对象
- JavaScript中的事件对象
- JavaScript事件基础(事件对象,键盘,鼠标,冒泡)
- javascript事件:获取事件对象getEvent函数
- 2.javascript中的事件对象【学习笔记】
- 巧用javascript对象属性,向事件绑定的匿名函数内传递循环控制变量的值
- Javascript 事件对象进阶(一)拖拽的原理