javascript如何阻止事件冒泡和預設行為

來源:互聯網
上載者:User

標籤:時間   har   port   element   cap   measure   string   簡單的   oev   

阻止冒泡:   冒泡簡單的舉例來說,兒子知道了一個秘密訊息,它告訴了爸爸,爸爸知道了又告訴了爺爺,一級級傳遞從而以引起事件的混亂,而阻止冒泡就是不讓兒子告訴爸爸,爸爸自然不會告訴爺爺。下面的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>
x48
  
 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();   }  } 
110 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)

javascript如何阻止事件冒泡和預設行為

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.