jQuery 事件綁定 和 JavaScript 原生事件綁定


總結一下:jQuery 事件綁定 和 JavaScript 原生事件綁定 及 區別

jQuery 事件綁定

jQuery 中提供了四種事件監聽綁定方式,分別是 bind、live、delegate、on,

對應的解除監聽的函數分別是 unbind、die、undelegate、off。

live、delegate 不多用,在Jquery1.7中已經移除,這里不多說

重點介紹 bind、on

 

bind(event,[data],function)

bind 是使用頻率較高的一種,作用就是在選擇到的元素上綁定特定事件類型的監聽函數,參數的含義如下:

event:事件類型,如 click、change、mouseover 等

data:傳入監聽函數的參數,通過 event.data 取到。可選

function:監聽函數,可傳入event對象,這里的event是 jQuery 封裝的 event 對象,與原生的event對象有區別,使用時需要注意

使用:$("#div li").bind("click",myFun);

 

on(event,childSelector,data,function)

on() 方法在被選元素及子元素上添加一個或多個事件處理程序。最常用的一種

自 jQuery 版本 1.7 起,on() 方法是 bind()、live() 和 delegate() 方法的新的替代品。該方法給 API 帶來很多便利,我們推薦使用該方法,它簡化了 jQuery 代碼庫。

注意:使用 on() 方法添加的事件處理程序適用於當前及未來的元素(比如由腳本創建的新元素)。

提示:如需移除事件處理程序,請使用 off() 方法。

提示:如需添加只運行一次的事件然后移除,請使用 one() 方法。

event:必需。規定要從被選元素移除的一個或多個事件或命名空間。由空格分隔多個事件值,也可以是數組。必須是有效的事件。

childSelector:可選。規定只能添加到指定的子元素上的事件處理程序(且不是選擇器本身,比如已廢棄的 delegate() 方法)。

 data:可選。規定傳遞到函數的額外數據。

function:可選。規定當事件發生時運行的函數。

使用:$(selector).on(event,childSelector,data,function);

.click()、.trigger() 也有事件綁定效果

 

JavaScript 原生事件綁定

1.在DOM元素中直接綁定:這里的DOM元素,可以理解為HTML標簽。JavaScript支持在標簽中直接綁定事件

2.在JavaScript代碼中onXXX綁定:在JavaScript代碼中綁定事件可以使JavaScript代碼與HTML標簽分離,文檔結構清晰,便於管理和開發。

3.綁定事件監聽函數:綁定事件的另一種方法是用 addEventListener() 或 attachEvent() 來綁定事件監聽函數。

 

一. 在DOM元素中直接綁定

1. 原生函數

1 <input onclick="alert('謝謝支持')" type="button" value="點我" />


2. 自定義函數

 1 <input onclick="myAlert()" type="button" value="點我" />
 2 
 3 <script type="text/javascript">
 4 
 5   function myAlert(){
 6 
 7     alert("謝謝支持");
 8 
 9   }
10 
11 </script>

 

二. 在JavaScript代碼中onXXX綁定

在JavaScript代碼中綁定事件的語法為:

elementObject.onXXX=function(){

    // 事件處理代碼

}

其中:

  • elementObject 為DOM對象,即DOM元素。
  • onXXX 為事件名稱。


例如,為 id="demo" 的按鈕綁定一個事件,顯示它的 type 屬性:

 1 <input id="demo" type="button" value="點擊我,顯示 type 屬性" />
 2 
 3 <script type="text/javascript">
 4 
 5     document.getElementById("demo").onclick=function(){
 6 
 7         alert(this.getAttribute("type")); // this 指當前發生事件的HTML元素,這里是<div>標簽
 8 
 9 }
10 </script>    

 

三. 綁定事件監聽函數

addEventListener()函數語法:

elementObject.addEventListener(eventName,handle,useCapture);

參數 說明
elementObject DOM對象(即DOM元素)。
eventName 事件名稱。注意,這里的事件名稱沒有“ on ”,如鼠標單擊事件 click ,鼠標雙擊事件 doubleclick ,鼠標移入事件 mouseover,鼠標移出事件 mouseout 等。
handle 事件句柄函數,即用來處理事件的函數。
useCapture Boolean類型,是否使用捕獲,一般用false 。這里涉及到JavaScript事件流的概念,后續章節將會詳細講解。


attachEvent()函數語法:(兼容IE)

elementObject.attachEvent(eventName,handle);

參數 說明
elementObject DOM對象(即DOM元素)。
eventName 事件名稱。注意,與addEventListener()不同,這里的事件名稱有“ on ”,如鼠標單擊事件 onclick ,鼠標雙擊事件 ondoubleclick ,鼠標移入事件 onmouseover,鼠標移出事件 onmouseout 等。
handle 事件句柄函數,即用來處理事件的函數。

 

注意:事件句柄函數是指“ 函數名 ”,不能帶小括號。


addEventListener() 是標准的綁定事件監聽函數的方法,是W3C所支持的,Chrome、FireFox、Opera、Safari、IE9.0及其以上版本都支持該函數;

但是,IE8.0及其以下版本不支持該方法,它使用 attachEvent() 來綁定事件監聽函數。所以,這種綁定事件的方法必須要處理瀏覽器兼容問題。

下面綁定事件的代碼,進行了兼容性處理,能夠被所有瀏覽器支持:

 1 function addEvent(obj,type,handle){
 2 
 3     try{ // Chrome、FireFox、Opera、Safari、IE9.0及其以上版本
 4 
 5         obj.addEventListener(type,handle,false);
 6 
 7     }catch(e){
 8 
 9         try{ // IE8.0及其以下版本
10 
11             obj.attachEvent('on' + type,handle);
12 
13         }catch(e){ // 早期瀏覽器
14 
15             obj['on' + type] = handle;
16 
17         }
18 
19     }
20 
21 }                    

這里使用 try{ ... } catch(e){ ... } 代替 if ... else... 語句,避免瀏覽器出現錯誤提示。

例如,為一個 id="demo" 的按鈕綁定事件,鼠標單擊時彈出對話框:

 
1 var obj = document.getElementById("demo");
2 addEvent(obj ,"click",myAlert);
3 
4 function myAlert(){
5 
6     alert("我是對話框");
7 
8 }

 

 

jQuery 事件綁定和 JavaScript 事件綁定的區別

jQuery 中的事件綁定具有疊加性,JavaScript 的事件綁定則是可覆蓋的。

看一下示例代碼:

 1  /* jQuery 綁定事件 */ 
 2  $(".cnd").click(function(){  
 3     console.log("first")}  
 4   );  
 5  $(".cnd").click(function(){  
 6     console.log("second")}  
 7   );  
 8     
 9  $(".cnd").click(function(){  
10     console.log("3rd")}  
11   );  
12     
13  /* js 綁定事件 */
14  var cm2 = document.getElementById("me2");  
15  cm2.onclick=function(){  
16       console.log("first");  
17  };  
18   cm2.onclick=function(){  
19       console.log("second");  
20   };  
21   cm2.onclick=function(){  
22       console.log("3rd");  
23   };  

 

執行 jQuery 的 .cnd 點擊事件,控制台打印的是:

 

執行 js 的 cm2 點擊事件,控制台打印的是:

 

可以發現:

使用 jQuery 的事件綁定方法,對同一個元素的 click 事件先后綁定了三個處理函數,結果按順序都輸出了,說明了 jQuery 的事件處理函數是疊加的;

而使用 JavaScript 原生的事件綁定,可以發現只執行了最后一個相同的綁定事件,后面綁定的事件處理函數覆蓋了前面的事件處理函數。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM