<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>无标题文档</title> </head> <body> <div id="box"> <input type="button" id="btn1" value="按钮" /> <a id="gop" href="事件处理程序(BUG).html">跳转页面</a> </div> <script type="text/javascript"> //事件对象 var btn1=document.getElementById('btn1'); var box=document.getElementById('box'); var gop=document.getElementById('gop'); btn1.addEventListener('click',showMes,false); function showMes(ev){ alert(ev.type); // var ele=ev.target; var ele=ev.srcElement;//IE访问事件标签 alert(ele); alert(ev.target.nodeName); // ev.stopPropagation();//这行代码阻止了事件冒泡 ev.cancelBubble=false;//IE浏览器阻止事件冒泡 } function showBox(){ alert("这个事件证实了事件冒泡"); } //阻止事件冒泡 function stopGoto(ev){ ev.stopPropagation(); // ev.preventDefault();//阻止了默认行为,阻止标签a的跳转 ev.returnValue=false;//IE阻止默认行为,对IE10貌似无效 } box.addEventListener('click',showBox,false); gop.addEventListener('click',stopGoto,false); </script> </body> </html>
请看stopGoto这个函数,我在函数里写了ev.returnValue=false;这句话,想要阻止IE浏览器上a标签的默认行为,但是在IE10中运行的时候发现,没有成功阻止。chrome上倒是成功阻止了。
ev.returnValue=false 这个改成 window.event.returnValue=false
可以阻止的,是因为你上面的代码在IE里面有报错,你代码里面没有用封装的方式都添加事件,在IE里面不能正确执行,所以,阻止不了,
请使用封装好的工具对象:
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.removeEventListener)
{
element.removeEventListener(type,handler,false);
}else if(element.attachEvent){
element.detachEvent('on'+type,handler);
}else
{
element['on'+type]=null;
}
},
getEvent:function(event){
return event?event:window.event;
},
getType:function(event){
return event.type;
},
getTarget:function(event){
return event.target||event.srcElement;
},
preventDefault:function(event)
{
if(event.preventDefault)
{
event.preventDefault();
}else
{
event.returnValue=false;
}
},
stopPropagation:function(event)
{
if(event.stopPropagation)
{
event.stopPropagation();
}else
{
event.cancelBubble=true;
}
}
}