javascript如何阻止事件冒泡和默认行为
阻止冒泡:
冒泡简单的举例来说,儿子知道了一个秘密消息,它告诉了爸爸,爸爸知道了又告诉了爷爷,一级级传递从而以引起事件的混乱,而阻止冒泡就是不让儿子告诉爸爸,爸爸自然不会告诉爷爷。下面的demo 就是很好的例子
<!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>x
48
1
2
<html> 3
4
<head> 5
<meta charset="UTF-8"> 6
<title></title> 7
<style type="text/css"> 8
#box { 9
width: 300px; 10
height: 300px; 11
background: red; 12
display: none; 13
} 14
</style> 15
<script type="text/javascript"> 16
window.onload = function() { 17
var btn = document.getElementById('btn'); 18
var box = document.getElementById('box'); 19
btn.onclick = function(ev) { 20
var oEvent = ev || event; 21
box.style.display = 'block'; 22
//oEvent.cancelBubble = true;//高版本浏览器 23
stopBubble(oEvent); 24
//在低版本的chrome和firefox浏览器中需要兼容性处理 25
//高版本chrome和firefox浏览器直接使用上面这行代码即可 26
} 27
document.onclick = function() { 28
box.style.display = 'none'; 29
} 30
31
} 32
//阻止冒泡事件的兼容性处理 33
function stopBubble(e) { 34
if(e && e.stopPropagation) { //非IE 35
e.stopPropagation(); 36
} else { //IE 37
window.event.cancelBubble = true; 38
} 39
} 40
</script> 41
</head> 42
43
<body> 44
<input type="button" id="btn" value="语言" /> 45
<div id="box"></div> 46
</body> 47
48
</html>我所实现的效果是:点击按钮btn让box显示,而点击其他地方则让box消失。
如果我不阻止冒泡的话,那么首先btn会触发点击时间,让盒子显示,但是由于box是包含在document中的,所以会向上冒泡又触发document的点击事件,盒子又消失。这个事件的执行顺序可以在不同的点击事件中使用alert来验证。关于cancelBubble的兼容性处理在高版本的chrome和firefox中已经不需要兼容处理了,直接使用oEvent.cancelBubble = true 即可。下面的阻止浏览器事件的兼容性处理在高版本浏览器中同样不需要。
如果我不阻止冒泡的话,那么首先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();
}
} 1
10
1
function preventDefa(e){ 2
if(window.event){ 3
//IE中阻止函数器默认动作的方式 4
window.event.returnValue = false; 5
} 6
else{ 7
//阻止默认浏览器动作(W3C) 8
e.preventDefault(); 9
} 10
} 这种是兼容性写法,但是如果你只需要支持高版本浏览器的话,那么如上文一样,一句话即可。
btn.onclick = function (){
return false;
}1
1
btn.onclick = function (){ 2
return false; 3
}

浙公网安备 33010602011771号