1. 程式人生 > >js之事件

js之事件

子元素 target 代碼 鍵盤事件 ges 點擊事件 opp 下拉加載 觸發

一、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之事件