javascript阻止冒泡和默认事件(默认行为)

本文通过一个示例详细讲解了如何在JavaScript中阻止事件冒泡及默认行为,并提供了兼容性解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

阻止冒泡。冒泡简单的举例来说,儿子知道了一个秘密消息,它告诉了爸爸,爸爸知道了又告诉了爷爷,一级级传递从而引起事件的混乱,而阻止冒泡就是不让儿子告诉爸爸,爸爸自然不会告诉爷爷了。下面的domo就是很好的例子。

<!DOCTYPE html>
<html>

	<head>
		<meta charset="UTF-8">
		<title></title>
		<style type="text/css">
			#box {
				width: 300px;
				height: 300px;
				background: red;
				display: none;
			}
		</style>
		<script type="text/javascript">
			window.onload = function() {
					var btn = document.getElementById('btn');
					var box = document.getElementById('box');
					btn.onclick = function(ev) {
						var oEvent = ev || event;
						box.style.display = 'block';
						//oEvent.cancelBubble = true;//高版本浏览器
						stopBubble(oEvent);
						//在低版本的chrome和firefox浏览器中需要兼容性处理
						//高版本chrome和firefox浏览器直接使用上面这行代码即可
					}
					document.onclick = function() {
						box.style.display = 'none';
					}

				}
				//阻止冒泡事件的兼容性处理
			function stopBubble(e) {
				if(e && e.stopPropagation) { //非IE
					e.stopPropagation();
				} else { //IE
					window.event.cancelBubble = true;
				}
			}
		</script>
	</head>

	<body>
		<input type="button" id="btn" value="语言" />
		<div id="box"></div>
	</body>

</html>


我所实现的效果是:点击按钮btn让box显示,而点击其他地方则让box消失。

如果我不阻止冒泡的话,那么首先btn会触发点击时间,让盒子显示,但是由于box是包含在document中的,所以会向上冒泡又触发document的点击事件,盒子又消失。这个事件的执行顺序可以在不同的点击事件中使用alert来验证。关于cancelBubble的兼容性处理在高版本的chrome和firefox中已经不需要兼容处理了,直接使用oEvent.cancelBubble = true 即可。下面的阻止浏览器事件的兼容性处理在高版本浏览器中同样不需要。


默认事件。即浏览器本身具备的功能。

function preventDefa(e){
	if(window.event){
		//IE中阻止函数器默认动作的方式 
		window.event.returnValue = false; 
	}
	else{
		//阻止默认浏览器动作(W3C) 
		e.preventDefault();
	} 
}
这种是兼容性写法,但是如果你只需要支持高版本浏览器的话,那么如上文一样,一句话即可。

btn.onclick = function (){
	return false;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值