JQuery學(xué)習(xí)筆記整理:事件處理

2018-06-19 16:03 更新

      本章的主題是jQuery事件處理,如果你對(duì)事件處理不了解,可以看這篇文章《JavaScript學(xué)習(xí)筆記整理(10):Event事件》。


目錄
1、事件處理
2、事件方法
2.1 document對(duì)象事件
2.2 瀏覽器事件方法
2.3 鼠標(biāo)事件方法
2.4 表單事件方法
2.5 鍵盤事件方法
3、jQuery Event對(duì)象的屬性和方法

1、事件處理
(1)事件處理

bind(eventType,function)、bind(eventType,data,function)  為jQuery對(duì)象內(nèi)每一個(gè)匹配元素添加一個(gè)事件處理函數(shù),支持可選的data參數(shù)。

bind(eventType,boolean)

bind(map)

one(eventType,funciton)、one(eventType,data,function)

unbind()、unbind(eventType)、unbind(eventType,boolean)

unbind(Event)


bind()為jQuery對(duì)象內(nèi)每一個(gè)匹配元素添加一個(gè)事件處理函數(shù),支持可選的data參數(shù)。

$('.box').bind('click',function(event){})

所有事件處理函數(shù)內(nèi)的this變量,正常情況下是指向當(dāng)前DOM元素,它還會(huì)給函數(shù)傳入一個(gè)參數(shù),表示當(dāng)前事件的Event對(duì)象。

綁定多個(gè)事件:

$('.box').bind('click mousedown',funciton(){});

每個(gè)事件名稱用空格隔開。

還使用映射對(duì)象(鍵值對(duì)形式)在一次bind方法調(diào)用中為多個(gè)事件綁定處理函數(shù)。

var handle = {

  mousedown: function(){},

  mouseup: function(){}

};

$('.box').bind(handle);


bind()方法還可以使用data(任意類型)傳入數(shù)據(jù)

var obj = {name:'tg'};

$('.box').bind('click',obj,funciton(event){

  console.log(event.data.name);  // "tg"

});

在事件處理函數(shù)內(nèi),event.data就是bind()傳入的data數(shù)據(jù)。

如果最后傳入一個(gè)boolean參數(shù),它用于指示是否允許元素的默認(rèn)行為和事件冒泡。如果該值為false,它將阻止元素的默認(rèn)行為(例如:觸發(fā)click事件的鏈接的默認(rèn)跳轉(zhuǎn)行為,觸發(fā)submit事件的表單的默認(rèn)提交行為)和事件的冒泡傳遞。

注意:bind()方法只會(huì)給當(dāng)前文檔中已經(jīng)存在的匹配元素添加事件處理函數(shù),如果后續(xù)動(dòng)態(tài)添加元素,添加元素并不會(huì)綁定該事件處理函數(shù),如希望綁定事件對(duì)后續(xù)添加的元素生效,可使用on()、delegate()等事件函數(shù)(優(yōu)先使用on,下面會(huì)講到)。

我們可以使用unbind()方法來(lái)撤銷之前綁定在元素上的事件處理函數(shù)。如果不提供任何參數(shù)調(diào)用unbind()方法,則表示撤銷所有之前綁定在jQuery對(duì)象中所有匹配元素上的事件處理函數(shù)。

$('.box').unbind('mousedown');


$('.box').bind('click',function(event){

  $(this).unbind(event);

})

如果像第二種方式傳入Event對(duì)象,jQuery會(huì)自動(dòng)分析Event對(duì)象,撤銷正確的事件處理函數(shù)。

one()方法和bind()方法的用法一樣,不過前者是用來(lái)綁定至多執(zhí)行一次的事件處理函數(shù)。

$('.box').one('click',function(){   

  alert(1);   

});

在上面的代碼中,給div.box綁定了一個(gè)點(diǎn)擊的事件處理函數(shù),當(dāng)你第一次點(diǎn)擊時(shí),會(huì)彈出1的彈窗,可是第二次再點(diǎn)擊時(shí),就不會(huì)再響應(yīng),什么都沒發(fā)生。

(2)動(dòng)態(tài)綁定事件處理函數(shù)

on(events,selector,data,function)、on(map,selector,data)  為匹配元素綁定事件處理函數(shù)

off(events,selector,function)、off(map,selector)  撤銷使用on方法綁定的事件處理函數(shù)

delegate(selector,eventType,function)、delegate(selector,eventType,data,function)、delegate(selector,map)  使用selector過濾jQuery對(duì)象內(nèi)所有匹配元素,然后綁定事件處理函數(shù)

undelegate()、undelegate(selector,eventType)  撤銷使用delegate方法綁定且匹配選擇器與事件類型的事件處理函數(shù)

on()方法也是用來(lái)為指定元素的一個(gè)或多個(gè)事件綁定事件處理函數(shù)。

從1.7版本開始,可使用on()方法統(tǒng)一取代之前的bind()、delegate()、live()等事件函數(shù)了,推薦使用on()方法。

$('.box').on('click',function(event){});

$('.box').on('click mousedown',function(){});

$('.box').on('click',{color:'red'},function(event){});

$('.box').on('click','p',function(){});  // 為div.box中的所有p元素綁定click事件處理函數(shù)


為新添加的元素添加事件
bind()方法只會(huì)為頁(yè)面已存在的元素綁定事件處理函數(shù),可是on()不同,它不僅支持直接在目標(biāo)元素上綁定事件,還支持在目標(biāo)元素的父輩元素上委托綁定。

<div class="box">

 <p>123</p><p>34</p>

</div>


$('.box').on('click','p',function(){ alert(1); });


$('.box').append('<p>新添加</p>');

在上面的代碼執(zhí)行后,你會(huì)發(fā)現(xiàn)click事件處理函數(shù)不僅對(duì)div.box中原有的兩個(gè)p有效,對(duì)后來(lái)append進(jìn)去的p一樣會(huì)響應(yīng)click事件處理函數(shù)。

off()方法用來(lái)撤銷使用on方法綁定的事件處理函數(shù)。

(3)手動(dòng)調(diào)用事件處理函數(shù)

trigger(eventType)  觸發(fā)綁定在jQuery對(duì)象內(nèi)匹配元素的特定事件類型(由eventType決定)上的事件處理函數(shù)。

trigger(Event)   觸發(fā)綁定在jQuery對(duì)象內(nèi)匹配元素的特定事件(由Event事件決定)上的事件處理函數(shù)。

triggerHandler(eventType)  觸發(fā)綁定在jQuery對(duì)象內(nèi)第一個(gè)匹配元素上的事件處理函數(shù),既不冒泡,也不實(shí)施事件的默認(rèn)行為。

模擬點(diǎn)擊

<div class="box">123</div>

<button>模擬點(diǎn)擊</button>


$('.box').on('click',function(){

  alert(1);

});

$('button').on('click',function(){

  $('.box').trigger('click');

});


2、事件方法

jQuery提供了很多常用事件綁定事件處理函數(shù)。


2.1 document對(duì)象事件方法

load(function)  即load事件,在頁(yè)面中的子元素及資源文件載入完成時(shí)觸發(fā)

ready(function)  在頁(yè)面中的元素已經(jīng)處理完成,DOM就緒時(shí)觸發(fā)

unload(function)  即unload事件,當(dāng)用戶離開當(dāng)前頁(yè)面時(shí)觸發(fā)


2.2 瀏覽器事件方法

error(function)  即error事件,在載入外部資源文件出錯(cuò)時(shí)觸發(fā)(如載入圖片出錯(cuò))

resize(function) 即resize事件,當(dāng)瀏覽器窗口大小發(fā)生變化時(shí)觸發(fā)

scroll(function) 即scroll事件,當(dāng)用戶拖動(dòng)滾動(dòng)條時(shí)觸發(fā)


2.3 鼠標(biāo)事件方法

click(function)  即click事件,在用戶點(diǎn)擊鼠標(biāo)按鈕時(shí)觸發(fā)

dblclick(function)  即dblclick事件,在用戶雙擊鼠標(biāo)按鈕時(shí)觸發(fā)

focusin(function)  即focusin事件,在元素得到焦點(diǎn)時(shí)觸發(fā)

focusout(function) 即focusout事件,在元素失去焦點(diǎn)時(shí)觸發(fā)

hover(function)、hover(function,function)  即hover事件,在鼠標(biāo)進(jìn)入或離開元素時(shí)觸發(fā),若指定兩個(gè)參數(shù),進(jìn)入時(shí)會(huì)觸發(fā)第一個(gè)函數(shù),離開時(shí)會(huì)觸發(fā)第二個(gè)函數(shù),否則都會(huì)觸發(fā)第一個(gè)。

mousedown(function)  即mousedown事件,當(dāng)在某元素上按下鼠標(biāo)時(shí)觸發(fā)

mouseenter(function) 即mouseenter事件,當(dāng)鼠標(biāo)進(jìn)入某元素顯示區(qū)域時(shí)觸發(fā)

mouseleave(function) 即mouseleave事件,當(dāng)鼠標(biāo)離開某元素顯示區(qū)域時(shí)觸發(fā)

mousemove(function)  即mousemove事件,當(dāng)鼠標(biāo)在某元素顯示區(qū)域內(nèi)移動(dòng)時(shí)觸發(fā)

mouseout(function)   即mouseout事件,當(dāng)鼠標(biāo)離開某元素顯示區(qū)域時(shí)觸發(fā)

mouseover(function)  即mouseover事件,當(dāng)鼠標(biāo)進(jìn)入某元素顯示區(qū)域時(shí)觸發(fā)

mouseup(function)    即mouseup事件,當(dāng)按下后釋放鼠標(biāo)按鈕時(shí)觸發(fā)


mouseenter()與mouseover()、mouseleave() 與mouseup()的區(qū)別?

mouseenter()和mouseover()作用一樣,但前者不支持冒泡,后者支持。

mouseleave()和mouseup()作用一樣,但前者不支持冒泡,后者支持。


2.4 表單事件方法

blur(function)  即blur事件,在元素失去焦點(diǎn)時(shí)觸發(fā)

change(function)  即change事件,在元素的值發(fā)生變化時(shí)觸發(fā)

focus(function)  即focus事件,在元素獲得焦點(diǎn)時(shí)觸發(fā)

select(function)  即select事件,在用戶選中某個(gè)可選框時(shí)觸發(fā)

submit(function)  即submit事件,當(dāng)用戶提交表單時(shí)觸發(fā)


2.5 鍵盤事件方法

keydown(function)  即keydown事件,當(dāng)用戶按下一個(gè)鍵后觸發(fā)

keypress(function)  即keypress事件,當(dāng)用戶按下一個(gè)鍵并釋放后觸發(fā)

keyup(function)  即keyup事件,當(dāng)用戶釋放一個(gè)鍵時(shí)觸發(fā)

keypress事件會(huì)在按下鍵盤按鍵時(shí)觸發(fā)。它與keydown事件類似,但keypress著重的是按下該鍵輸入了哪個(gè)字符(只有能夠打印字符的鍵才會(huì)觸發(fā)keypress),keydown著重的是按下了哪個(gè)鍵(按下任何鍵都可觸發(fā)keydown)。對(duì)于諸如Ctrl、Alt、Shift、Delete、Esc等修飾性和非打印鍵,請(qǐng)監(jiān)聽keydown事件。


3、jQuery Event對(duì)象的屬性和方法

Event對(duì)象主要英語(yǔ)獲取事件的相關(guān)信息。

currentTarget   返回正在處理(響應(yīng))該事件的元素

data   返回綁定事件時(shí)傳遞的data對(duì)象

isDefaultPrevented()   若已經(jīng)調(diào)用過preventDefault()方法,返回true

isImmediatePropagationStopped()  若已經(jīng)調(diào)用過stopImmediatePropation()方法,返回true

originalEvent   返回未經(jīng)jQuery處理的原始DOM Event對(duì)象

pageX、pageY   返回相對(duì)于頁(yè)面左上角的鼠標(biāo)位置

preventDefault()  用來(lái)阻止當(dāng)前事件的默認(rèn)行為

relatedTarget  僅對(duì)鼠標(biāo)事件有效,返回該鼠標(biāo)事件有關(guān)的元素

result   返回處理該事件的最后一個(gè)事件處理函數(shù)的返回值

stopImmediatePropagation()  立即阻止調(diào)用當(dāng)前事件的其他事件處理函數(shù)

stopPropagation()  阻止事件冒泡

target  返回觸發(fā)事件的元素

timeStamp  返回事件發(fā)生的時(shí)間

type  返回事件類型

which  在鍵盤和鼠標(biāo)事件中,返回用戶按下的鍵或鼠標(biāo)按鈕


了解原生的JavaScript事件對(duì)理解jQuery事件很有幫助,可以看這篇文章《JavaScript學(xué)習(xí)筆記整理(10):Event事件》。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)