zoukankan      html  css  js  c++  java
  • javascript如何阻止事件冒泡和默认行为

    阻止冒泡: 
      冒泡简单的举例来说,儿子知道了一个秘密消息,它告诉了爸爸,爸爸知道了又告诉了爷爷,一级级传递从而以引起事件的混乱,而阻止冒泡就是不让儿子告诉爸爸,爸爸自然不会告诉爷爷。下面的demo 就是很好的例子
    <!DOCTYPE html> 
    <html> 
      
      <head> 
        <meta charset="UTF-8"> 
        <title></title> 
        <style type="text/css"> 
          #box { 
             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; 
    }





  • 相关阅读:
    Elementary Methods in Number Theory Exercise 1.2.25
    Elementary Methods in Number Theory Exercise 1.2.14
    图解欧几里德算法
    图解欧几里德算法
    Elementary Methods in Number Theory Exercise 1.2.14
    Android中的长度单位详解(dp、sp、px、in、pt、mm)
    分享下多年积累的对JAVA程序员成长之路的总结
    android异常之都是deamon惹的祸The connection to adb is down, and a severe error has occured.
    TomatoCartv1.1.8.2部署时报错
    JavaScript浏览器对象之二Document对象
  • 原文地址:https://www.cnblogs.com/zjx2011/p/8447510.html
Copyright © 2011-2022 走看看