浏览器中如何阻止默认事件的发生?

我们知道,浏览器中的事假一般包括两种事件,一种是事件冒泡,一种是事件捕获,事件冒泡之于IE事件中,事件捕获之于DOM事件中。

假如我点击了一个div,那么按照事件冒泡的机制,那么将执行div中的点击事件,在执行body中的点击事件,再执行html中的点击事件,最后执行document的点击事件,而采用事件捕获思想,将先执行document的点击事件,再执行html中的点击事件,接着执行body中的点击事件,最后才执行本体div中的点击事件。

我们今天要讨论的,主要是如何在一个标签中,阻止一个事件发生,如下:

<a id='aid’href='http://www.baidu.com '>qq</a>

正常情况下,点击a标签将会跳转到http://www.baidu.com的页面,那么如何实现,才可以使得点击a标签后不会跳转到http://www.baidu.com的页面呢?

江湖惯例,先上代码:

<script>
function StopDefault(window,undefined){
	
domReady:function(){  
	if(document.readyState === "complete"){  
	  var target = document.getElementById("aid");  
	  EventListenerhandler(target, "click", preventDefault);  
	} else {  
		setTimeout(arguments.callee,1)  
		   }  
}  
						  
preventDefault:function(e){           //做兼容性匹配,分IE与dom两项
	var e = e || window.event;  	  //e是IE事件,window.event是dom事件	  
	if(e.preventDefault){  
	  e.preventDefault();            //DOM中取消事件的方法
	   } else {  
		e.returnValue = false;       //IE中取消事件的方法
		}  
	}  
	
EventListenerhandler:function(target, type, handler){      //做兼容测试 
	if(target.addEventListener){                           //DOM2级方法,
	  target.addEventListener(type, handler, false);  
	 } else if(target.attachEvent){                         //IE方法 
	  target.attachEvent("on"+type, handler);  
		} else {                                           //DOM0级方法,
	  target["on"+type] = handler;  
		}  
	}
	
domReady();  
  
};  
<script>

对EventListenerhandler()方法,这里做一下简要介绍,当为dom2级事件时,事件一般是这样的格式:

var btn =document.getElementById("mybtn");
btn.addEventListener("click",function(event){alert("hello")},false);


其中的false参数是表示在事件冒泡阶段进行处理,一般为了兼容性问题,都设置为false。

为dom0级事件时,事件一般是这样的格式:

var btn =document.getElementById("mybtn");
btn.οnclick=function(event){alert("hello")};


为IE级事件时,事件一般是这样的格式:

var btn =document.getElementById("mybtn");
btn.attachEvent("click",function(event){alert("hello")})


这里要注意,target["on"+type]事实上相当于target. "on"+type,这是数组的另外一种表示方式


对preventDefault()方法,表示取消默认方法;

IE中只需要把returnValue的值设置为false即可,而dom中直接调用preventDefault()即可;

这里可能有时还会遇到不是取消默认事件,而是取消事件冒泡,那么只需要做如下调用;

IE中只需要把cancelBubble的值设置为true即可,而dom中直接调用stopPropagation()即可;


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值