您的位置:首页 > Web前端 > JavaScript

JS事件-事件处理程序之IE事件处理程序

2017-05-10 08:48 274 查看
与访问DOM中的event对象不同,要访问IE中的event对象有几种不同的方式,取决于指定事件处理程序的方法。在使用DOM0级方法添加事件处理程序时,event对象作为window对象一个属性存在。来看下面例子。

var btn = document.getElementById('myBtn');
btn.onclick = function() {
var event = window.event;
alert(event.type);
}


在此,我们通过window.event取得了event对象,并检测了被触发事件的类型(IE中的type属性与DOM中的type属性是相同的),可是,如果事件处理程序是使用attachEvent()添加的,那么就会有一个event对象作为参数被传入事件处理程序函数中,如下所示.

var btn = document.getElementById('myBtn');
btn.attachEvent('onclick', function(event){
alert(event.type); // click
});


在像这样使用attachEvent()的情况下,也可以通过window对象来访问event对象,就像使用DOM0级方法时一样。不过为方便起见,同一个对象也会作为参数传递。

如果是通过HTML特性指定的事件处理程序,那么还可以通过一个名叫event的变量来访问event对象(与DOm中事件模型相同)。再看一个例子。

<input type="button" value="Click Me" onclick="alert(event.type)">


IE的event对象同样也包含与创建它的事件相关的属性和方法。其中很多属性和方法都有对应的或者相关的DOM属性和方法。与DOM的event对象一样,这些属性和方法也会因为事件类型的不同页不同,但所有事件对象都会包含包含下表所列的属性和方法。

属性/方法类型读/写说明
cancelBubbleBoolean读/写默认值为false,但将其设置为true就可以取消事件冒泡(与DOM中的stopPropagation()方法的作用相同)
returnValueBoolean读/写默认值为true,但将其设置为false就可以事件的默认行为(与DOM中的preventDefault()方法的作用相同)
srcElementElement只读事件的目标(与DOm中的target属性相同)
typeString只读被触发的事件的类型
因为事件处理程序的作用域是根据指定它的方式来确定的。所有不能认为this会始终等于事件目标.故而,最好还是使用event.srcElement比较保险.例如:

var link = document.getElementById('myLink');
link.onclick=function(){
window.event.returnValue = false;
}


这个例子在onclick事件处理程序中使用returnValue达到的阻止链接默认行为的目的。与DOM不同的是,在此没有办法确定事件是否能被取消。

相应地,cancelBubble属性与DOM中的stopPropagation()方法的作用相同,都是用来停止事件冒泡的。由于IE不支持事件捕获,因岩浆只能取消事件冒泡;但stopPropagation()可以同时取消事件捕获和冒泡。例如:

var btn = document.getElementById('mybtn');
btn.onclick = function() {
alert('Clicked');
window.event.cancelBubble = true;
}

document.body.onclick = function() {
alert('Body clicked');
}


通过在onclick事件处理程序中将cancelBubble设置为true,就可以阻止事件通过冒泡页触发document.body中注册的事件处理程序。结果,在单击按钮后,只会显示一个警告框。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: