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; 
    }





  • 相关阅读:
    wayland学习笔记(八) wayland为什么要用libffi
    线程安全函数和可重入函数 辨析
    patch的基本使用
    c++ condition_variable的wait 语法糖
    系统启动知识 说道说道(一) 冰山之下
    DDR 带宽计算公式
    wayland学习笔记(七)config的结构分析
    功耗管理篇
    operator=() 重载的问题
    ABC216
  • 原文地址:https://www.cnblogs.com/zjx2011/p/8447510.html
Copyright © 2011-2022 走看看