Js 冒泡事件阻止__function

來源:互聯網
上載者:User
轉載地址: http://www.cnblogs.com/jams742003/archive/2009/08/29/1556187.html   1. 事件目標

現在,事件處理常式中的變數event儲存著事件對象。而event.target屬性儲存著發生事件的目標元素。這個屬性是DOM API中規定的,但是沒有被所有瀏覽器實現 。jQuery對這個事件對象進行了必要的擴充,從而在任何瀏覽器中都能夠使用這個屬性。通過.target,可以確定DOM中首先接收到事件的元素(即實際被單擊的元素)。而且,我們知道this引用的是處理事件的DOM元素,所以可以編寫下列代碼:
$(document).ready(function(){
 $('#switcher').click(function(event){
  $('#switcher .button').toggleClass('hidden');
  })
 })
  
$(document).ready(function(){
 $('#switcher').click(function(event){
  if(event.target==this){
  $('#switcher .button').toggleClass('hidden');
  }
  })
 })
此時的代碼確保了被單擊的元素是<div id="switcher"> ,而不是其他後代元素。現在,單擊按鈕不會再摺疊樣式轉換器,而單擊邊框則會觸發摺疊操作。但是,單擊標籤同樣什麼也不會發生,因為它也是一個後代元素。實際上,我們可以不把檢查代碼放在這裡,而是通過修改按鈕的行為來達到目標 。

2. 停止事件傳播

事件對象還提供了一個.stopPropagation()方法,該方法可以完全阻止事件冒泡。與.target類似,這個方法也是一種純JavaScript特性,但在跨瀏覽器的環境中則無法安全地使用 。不過,只要我們通過jQuery來註冊所有的事件處理常式,就可以放心地使用這個方法。

下面,我們會刪除剛才添加的檢查語句event.target == this,並在按鈕的單擊處理常式中添加一些代碼:

$(document).ready(function(){
 $('#switcher .button').click(funtion(event){
  //……
   event.stopPropagation();
  })
 }) 

  同以前一樣,需要為用作單擊處理常式的函數添加一個參數,以便訪問事件對象。然後,通過簡單地調用event.stopPropagation()就可以避免其他所有DOM元素響應這個事件。這樣一來,單擊按鈕的事件會被按鈕處理,而且只會被按鈕處理。單擊樣式轉換器的其他地方則可以摺疊和擴充整個地區。

3. 預設操作

如果我們把單擊事件處理常式註冊到一個錨元素,而不是一個外層的<div>上,那麼就要面對另外一個問題:當使用者單擊連結時,瀏覽器會載入一個新頁面。這種行為與我們討論的事件處理常式不是同一個概念,它是單擊錨元素的預設操作。類似地,當使用者在編輯完表單後按下斷行符號鍵時,會觸發表單的submit事件,在此事件發生後,表單提交才會真正發生。

如果我們不希望執行這種預設操作,那麼在事件對象上調用.stopPropagation()方法也無濟於事,因為預設操作不是在正常的事件傳播流中發生的。在這種情況下,.preventDefault()方法則可以在觸發預設操作之前終止事件 。

提示 當在事件的環境中完成了某些驗證之後,通常會用到.preventDefault()。例如,在表單提交期間,我們會對使用者是否填寫了必要欄位進行檢查,如果使用者沒有填寫相應欄位,那麼就需要阻止預設操作。我們將在第8章詳細討論表單驗證。

事件傳播和預設操作是相互獨立的兩套機制,在二者任何一方發生時,都可以終止另一方。如果想要同時停止事件傳播和預設操作,可以在事件處理常式中返回false,這是對在事件對象上同時調用.stopPropagation()和.preventDefault()的一種簡寫方式。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.