js之事件

來源:互聯網
上載者:User

標籤:出錯   alert   on()   ges   它的   top   綁定   span   選擇   

一、js事件

        在js中有許多的事件綁定。比如滑鼠點擊事件、雙擊事件、鍵盤事件等等。

        其實我相信大多數人都用過很多的事件綁定的方法,js事件參考如下:

        當我們需要一個通用的方法去封裝我們需要的事件的時候,我們該怎麼封裝呢?通過名字去調用嗎,我們有一個添加事件監聽的方法,叫addEventListenner()。我們通過這個來進行事件的註冊監聽。那麼我們是不是要想一想有沒有瀏覽器的相容性的問題呢,答案是當然有,在低版本的IE中我們使用attachEvent()來進行事件的監聽。但是現在對於IE低版本的佔有率已經很低了,所以對於IE低版本的相容我們瞭解即可。

 1 //  我們使用一個函數來封裝一下這個addEventListener 2 var listen = function(el, event, fn) { 3         el.addEventListener(event, fn); 4 } 5  6 var btn = document.getElementById("btn"); 7 listen(btn, "click", function(e) { 8     e.preventDefault();  //  阻止a標籤的預設事件 9     alert("我被點擊了");10 });

        其實在addEventListener這個方法還有第三個參數,是用來決定在冒泡階段還是在捕獲階段執行的:

  • true - 事件控制代碼在捕獲階段執行
  • false- false- 預設。事件控制代碼在冒泡階段執行

 

 

        事件的冒泡

         事件冒泡是什麼呢?當我們點擊一個元素的時候,這個元素並沒有綁定事件,但是呢,在它的父節點上我們綁定了一個事件,這時候在父節點上的事件會被觸發。

1 <div>2     <p>xsxa</p>3 </div>
1 var _div = document.getElementsByTagName("div")[0];2  _div.addEventListener(‘click‘, function() {3      alert(‘div‘);4  })

        當我們點擊p標籤的時候,沒有觸發事件,但是通過事件冒泡。div元素接收這個事件,然後進行了響應,如果我們在body上也註冊了一個事件,那麼這個事件也會被觸發。

那我們怎麼去阻止冒泡的呢?我們有一個方法叫stopPropatation(),這個方法能夠阻止冒泡。

        事件代理(委託)  

        那麼我們瞭解了事件的冒泡機制之後,我們就來談一談這個東西的應用。在我們實際的工作當中,事件代理也是會用到的,那麼我們需要用到事件代理的情景是怎樣的呢?在一個父元素中,有很多的子項目,他們都有一個觸發事件,比如點擊,當我們要頻繁的去添加、更改子項目的時候,我們就要去為每一個子項目添加事件,這時候頻繁的操作就可能會出錯,同時也帶來了一定的複雜度,比如部落格裡面下拉載入照片,我們需要為每一個圖片添加事件,這時候,我們可以選擇的解決辦法就是使用事件代理。

1 <div id="pics">2     <a href="../">圖片1</a>3     <a href="../">圖片2</a>4     <a href="../">圖片3</a>5     <a href="../">圖片4</a>6     <!-- 下拉載入圖片 -->7 </div>
 1 var pic = document.getElementById("pics"); 2  3 //  使用上面封裝的方法 4  5 listen(pic, "click", function(e) { 6     var target = e.target;    //   擷取被點擊的標籤 7     if (target.nodeName === "A") { 8         alert(target.innerHTML); 9     }10 });

        我們會發現,當我們這樣寫就能夠對這個標籤裡的所有的a元素進行處理,不僅僅能使代碼簡介,同時我們還能減少記憶體的佔用,這就是事件代理的作用,快試試吧。

 

js之事件

相關文章

聯繫我們

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