阻止冒泡。冒泡简单的举例来说,儿子知道了一个秘密消息,它告诉了爸爸,爸爸知道了又告诉了爷爷,一级级传递从而引起事件的混乱,而阻止冒泡就是不让儿子告诉爸爸,爸爸自然不会告诉爷爷了。下面的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
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。