阻止冒泡: 
  冒泡简单的举例来说,儿子知道了一个秘密消息,它告诉了爸爸,爸爸知道了又告诉了爷爷,一级级传递从而以引起事件的混乱,而阻止冒泡就是不让儿子告诉爸爸,爸爸自然不会告诉爷爷。下面的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
<!DOCTYPE html> 
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 即可。下面的阻止浏览器事件的兼容性处理在高版本浏览器中同样不需要。

默认事件。即浏览器本身具备的功能。
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
}

javascript如何阻止事件冒泡和默认行为的更多相关文章

  1. JavaScript事件冒泡机制和阻止事件冒泡及默认事件

    一.阻止事件冒泡: 1.html中加return false 2.js中加return false 3.IE下:window.event.cancelBubble = true:  FF下:event ...

  2. javascript里阻止事件冒泡

    如下图所示,灰色块包含红色块,假设我们为灰色和红色块各绑定一个单击弹框事件,当我们点击红色块时,不希望触发灰色块的弹框事件,这就需要阻止冒泡事件了. IE里阻止冒泡事件使用cancelBubble属性 ...

  3. js 阻止事件冒泡和默认行为 preventDefault、stopPropagation、return false

    preventDefault: preventDefault它是事件对象(Event)的一个方法,作用是取消一个目标元素的默认行为.既然是说默认行为,当然是元素必须有默认行为才能被取消,如果元素本身就 ...

  4. vue.js阻止事件冒泡和默认事件

    首先我们来看原生JS取消事件冒泡方法: e.stopPropagation(); //非IE浏览器window.event.cancelBubble = true; //IE浏览器 原生JS阻止默认事 ...

  5. vue阻止事件冒泡和默认事件

    本文地址:https://www.cnblogs.com/guomin/p/9273862.html 原生js取消事件冒泡 try{ e.stopPropagation();//非IE浏览器 } ca ...

  6. 阻止事件冒泡,阻止默认事件,event.stopPropagation()和event.preventDefault(),return fal的区别

    今天来看看前端的冒泡和事件默认事件如何处理 1.event.stopPropagation()方法 这是阻止事件的冒泡方法,不让事件向documen上蔓延,但是默认事件任然会执行,当你掉用这个方法的时 ...

  7. javascript阻止事件冒泡和浏览器的默认行为

    1.阻止事件冒泡,使成为捕获型事件触发机制. 1 function stopBubble(e) { 2 //如果提供了事件对象,则这是一个非IE浏览器 3 if ( e && e.st ...

  8. javascript 阻止事件冒泡和阻止默认事件对比

    公司项目有像上图中效果的功能需求这也是很常见功能很简单功能,通过一个小例子和大家聊聊js的事件冒泡和默认事件. 先说说一般的实现方式即使用阻止事件冒泡的方式去做,给input绑定一个click事件(并 ...

  9. 原生javascript实现阻止浏览器默认行为与阻止事件冒泡

    不同的浏览器之间存在兼容问题,在IE与标准浏览器之间存在很大的差异,所以在实现阻止浏览器默认行为和阻止事件冒泡就要考虑要它们之间的不同 /** * 取消冒泡 * @param {事件} e */ fu ...

随机推荐

  1. ios Https问题

    HTTPS认证过程:   ① 浏览器发送一个连接请求给安全服务器.   ② 服务器将自己的证书,以及同证书相关的信息发送给客户浏览器.   ③ 客户浏览器检查服务器送过来的证书是否是由自己信赖的 CA ...

  2. jquery记录

    jquery validate验证框架 参考:http://www.cnblogs.com/linjiqin/p/3431835.html http://www.runoob.com/jquery/j ...

  3. Java字符串split分割星号*等特殊字符问题(转)

    Java的split()方法分割字符串比较常用(见[Java]字符串以某特殊字符分割处理 ),但在有的时候,会遇到星号*等正则表达式中的特殊字符而无法分割的问题. 比如某需求,用户输入产品规格:厚*宽 ...

  4. R语言中 fitted()和predict()的区别

    fitted是拟合值,predict是预测值.模型是基于给定样本的值建立的,在这些给定样本上做预测就是拟合.在新样本上做预测就是预测. 你可以找一组数据试试,结果如何. fit<-lm(weig ...

  5. 【转】java.sql.SQLException: statement is closed语句被关闭 druid连接池报错

    我之前在用druid 1.0.28版本也出现过这个问题, 现象就是: 报这个错的时候, 往往会出现在一条毫无错误的sql执行上报错,  sql放到数据库上执行或者单独拎出来执行完全没问题, 但是为什么 ...

  6. RECONSUME_LATER

    Failure consumption,later try to consume. ================MessageExt [queueId=0, storeSize=134, queu ...

  7. 关于wcf配置未启动net.tcp监控导致无法访问wcf

    在服务里面启动NetTcpActivator和NetTcpPortSharing服务

  8. handsontable-developer guide-setting options,callback

    1.cell数组 cell: [ {row: 0, col: 0, readOnly: true} ] 2.cells函数 cells: function(row, col, prop){ var c ...

  9. 层层递进Struts1(五)之处理流程

    这篇博客我们深入Struts框架执行部分源码,从ActionServlet的process函数开始,看一下其内在的执行过程. 流程图 以下流程图展示的是ActionServlet和RequestPro ...

  10. Oracle EBS Color 色彩设置

    Oracle EBS配色方案的截图 If the Java Look and Feel profile option is set to Oracle, the Java Color Scheme c ...