js阻止冒泡和默认事件(默认行为)详解

JavaScript017

js阻止冒泡和默认事件(默认行为)详解,第1张

本文实例为大家分享了js阻止冒泡和默认事件方法,供大家参考,具体内容如下

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

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

如果<p>是在<div>里面,那么呢,<P>有一个onclick事件,<div>也有onclick事件,为了触发<P>的点击事件时,不触发父元素的点击事件,那么就需要调用如下函数:

代码如下:

function stopBubble(e){

if(e&&e.stopPropagation){//非IE

e.stopPropagation()

}

else{//IE

window.event.cancelBubble=true

}

}

<a onclick=''>如果要阻止默认事件的触发,即默认的href事件,那么就需要调用如下函数:

代码如下:

function stopDefault( e ) {

//阻止默认浏览器动作(W3C)

if ( e &&e.preventDefault )

e.preventDefault()

//IE中阻止函数器默认动作的方式

else

window.event.returnValue = false

return false

}