javascript阻止冒泡和默认事件(默认行为)

阻止冒泡。冒泡简单的举例来说,儿子知道了一个秘密消息,它告诉了爸爸,爸爸知道了又告诉了爷爷,一级级传递从而引起事件的混乱,而阻止冒泡就是不让儿子告诉爸爸,爸爸自然不会告诉爷爷了。下面的domo就是很好的例子。

 

[html] view plain copy
 
  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 即可。下面的阻止浏览器事件的兼容性处理在高版本浏览器中同样不需要。

 

默认事件。即浏览器本身具备的功能。

 

[javascript] view plain copy
 
  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. }  

这种是兼容性写法,但是如果你只需要支持高版本浏览器的话,那么如上文一样,一句话即可。

 

 

[javascript] view plain copy
 
    1. btn.onclick = function (){  
    2.     return false;  
    3. }  

 

原文地址:http://blog.csdn.net/sir1241/article/details/52798197

posted @ 2017-05-18 19:27  茉莉尔  阅读(1061)  评论(0编辑  收藏  举报