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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js阻止冒泡和默认事件(默认行为)详解相关的知识,希望对你有一定的参考价值。

参考技术A 本文实例为大家分享了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;

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

阻止事件冒泡 和 阻止事件默认行为

1.event.stopPropagation()方法 这是阻止事件的冒泡方法,不让事件向documen上蔓延,但是默认事件任然会执行,当你掉用这个方法的时候,如果点击一个连接,这个连接仍然会被打开,

2.event.preventDefault()方法 这是阻止默认事件的方法,调用此方法是,连接不会被打开,但是会发生冒泡,冒泡会传递到上一层的父元素;

3.return false  ; 这个方法比较暴力,他会同事阻止事件冒泡也会阻止默认事件;写上此代码,连接不会被打开,事件也不会传递到上一层的父元素;可以理解为return false就等于同时调用了event.stopPropagation()和event.preventDefault()

 

4.我们来看看几组demo,使用jquery进行DOM操作 这是html代码,div里面套了一个a标签,连接到百度

 

css代码,a标签占父元素的空间的1/4,背景颜色为红色; .box1{ height: 200px; width: 600px; margin: 0 auto; } .box1 a{ display: block; height: 50%; width: 50%; background:red; } 下面来看js代码,

第一种  //不阻止事件冒泡和默认事件 $(".box1").click(function(){ console.log("1")//不阻止事件冒泡会打印1,页面跳转; });

 

第二种 //阻止冒泡 $(".box1 a").click(function(event){ event.stopPropagation();//不会打印1,但是页面会跳转; }); $(".box1").click(function(){ console.log("1") });

 

第三种 $(".box1 a").click(function(event){ //阻止默认事件 event.preventDefault();//页面不会跳转,但是会打印出1, }); $(".box1").click(function(){ console.log("1"); });

 

第四种 $(".box1").click(function(){ console.log("1") }); //阻止冒泡 $(".box1 a").click(function(event){ event.stopPropagation(); //阻止默认事件 event.preventDefault() //页面不会跳转,也不会打印出1 })

 

第五种 $(".box1").click(function(){ console.log("1") }); $(".box1 a").click(function(event){ return false; //页面不会跳转,也不会打印出1,等于同时调用了event.stopPropagation()和event.preventDefault()

以上是关于js阻止冒泡和默认事件(默认行为)详解的主要内容,如果未能解决你的问题,请参考以下文章

JS阻止事件冒泡与浏览器默认行为

右键、阻止冒泡

js 停止事件冒泡 阻止浏览器的默认行为(阻止超连接 #)

js 阻止冒泡 阻止默认事件

js中阻止事件冒泡和浏览器默认行为

js 阻止事件冒泡和默认行为 preventDefaultstopPropagationreturn false