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

<!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

}

来自为知笔记(Wiz)

原文地址:https://www.cnblogs.com/zjx2011/p/8447510.html

时间: 2024-11-08 01:54:08

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

javascript阻止事件冒泡及默认事件方式

//阻止事件冒泡 function stopBubble(e){ if(e&&e.stopPropagation){//非IE e.stopPropagation(); } else{//IE window.event.cancelBubble=true; } } //阻止默认事件 function stopDefault(e) { //阻止默认浏览器动作(W3C) if ( e && e.preventDefault ){ e.preventDefault(); }els

阻止事件冒泡和默认行为,禁止键盘事件

阻止事件冒泡: function(e){ e = e || window.event; if (e.stopPropagation) e.stopPropagation(); else e.cancelBubble = true; } 取消事件默认行为: function(e) { e = e || window.event; if(e.preventDefault) e.preventDefault(); else e.returnValue = false; } 阻止键盘输入 elem.on

阻止事件冒泡与默认行为

1.既阻止事件冒泡又阻止事件默认行为: function stopEvent(e){ //兼容 var e = e || window.event if(e.preventDefault){ e.preventDefault(); e.stopPropagation(); }else { e.returnValue = false; e.cancelBubble = true; return false; } } 2.仅阻止事件冒泡: function stopBubble(e){ var e

javascript里阻止事件冒泡

如下图所示,灰色块包含红色块,假设我们为灰色和红色块各绑定一个单击弹框事件,当我们点击红色块时,不希望触发灰色块的弹框事件,这就需要阻止冒泡事件了. IE里阻止冒泡事件使用cancelBubble属性,如果事件句柄想阻止事件传播到包容对象,必须把该属性设为 true. 火狐等非IE浏览器阻止冒泡事件使用stopPropagation()方法.调用该方法后,该节点上处理该事件的处理程序将被调用,事件不再被分派到其他节点. 我们看代码实例: <!doctype html> <html lan

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

preventDefault: preventDefault它是事件对象(Event)的一个方法,作用是取消一个目标元素的默认行为.既然是说默认行为,当然是元素必须有默认行为才能被取消,如果元素本身就没有默认行为,调用当然就无效了.什么元素有默认行为呢?如链接<a>,提交按钮<input type=”submit”>等.当Event对象的cancelable为false时,表示没有默认行为,这时即使有默认行为,调用 preventDefault也是不会起作用的. 我们都知道,链接&

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

首先我们来看原生JS取消事件冒泡方法: e.stopPropagation(); //非IE浏览器window.event.cancelBubble = true; //IE浏览器 原生JS阻止默认事件方法: e.preventDefault(); //非IE浏览器window.event.returnValue = false; //IE浏览器 而vue.js给我们提供了更简便的方法,我们可以通过function($event)来获取事件对象,$event.target则是选择发生事件的目标元

阻止事件冒泡和默认到事件对象在不同浏览器中的传递

今天群里有一个同学发了一个问题,问题起因是他定义了一个drag函数,然后函数内部使用了e进行组织默认实践,结果在360浏览器正常运行但是火狐却报错,e不存在,第一时间有点懵,组织冒泡和组织默认一般都用,那里需要那里用,一般不会出现这种问题.因为新手才有这种操作,但是引发我兴趣,经过一番测试,我发现在360里面时间默认进行了传递,所以在360可以正常运行,但是在火狐里面没有进行传递.然后我传递参数为事件对象进去,执行成功,然后引发了我对几个浏览器不同引擎的猜测和测验.首先上代码, <!DOCTYP

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

今天来看看前端的冒泡和事件默认事件如何处理 1.event.stopPropagation()方法 这是阻止事件的冒泡方法,不让事件向documen上蔓延,但是默认事件任然会执行,当你掉用这个方法的时候,如果点击一个连接,这个连接仍然会被打开, 2.event.preventDefault()方法 这是阻止默认事件的方法,调用此方法是,连接不会被打开,但是会发生冒泡,冒泡会传递到上一层的父元素: 3.return false  : 这个方法比较暴力,他会同事阻止事件冒泡也会阻止默认事件:写上此代

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

1.event.stopPropagation()方法 这是阻止事件的冒泡方法,不让事件向documen上蔓延,但是默认事件任然会执行,当你掉用这个方法的时候,如果点击一个连接,这个连接仍然会被打开, 2.event.preventDefault()方法 这是阻止默认事件的方法,调用此方法是,连接不会被打开,但是会发生冒泡,冒泡会传递到上一层的父元素: 3.return false  : 这个方法比较暴力,他会同事阻止事件冒泡也会阻止默认事件:写上此代码,连接不会被打开,事件也不会传递到上一层的