淺談jquery之on()綁定事件和off()解除綁定事件
off()函數(shù)用于移除元素上綁定的一個(gè)或多個(gè)事件的事件處理函數(shù)。
off()函數(shù)主要用于解除由on()函數(shù)綁定的事件處理函數(shù)。
該函數(shù)屬于jQuery對(duì)象(實(shí)例)。
語法
jQuery 1.7 新增該函數(shù)。其主要有以下兩種形式的用法:
用法一:
jQueryObject.off( [ events [, selector ] [, handler ] ] )
用法二:
jQueryObject.off( eventsMap [, selector ] )
參數(shù)
參數(shù) | 描述 |
---|---|
events | 可選/String類型一個(gè)或多個(gè)用空格分隔的事件類型和可選的命名空間,例如"click"、"focus click"、"keydown.myPlugin"。 |
eventsMap | Object類型一個(gè)Object對(duì)象,其每個(gè)屬性對(duì)應(yīng)事件類型和可選的命名空間(參數(shù)events),屬性值對(duì)應(yīng)綁定的事件處理函數(shù)(參數(shù)handler)。 |
selector | 可選/String類型一個(gè)jQuery選擇器,用于指定哪些后代元素可以觸發(fā)綁定的事件。如果該參數(shù)為null或被省略,則表示當(dāng)前元素自身綁定事件(實(shí)際觸發(fā)者也可能是后代元素,只要事件流能到達(dá)當(dāng)前元素即可)。 |
handler | 可選/Function類型指定的事件處理函數(shù)。 |
off()函數(shù)將會(huì)移除當(dāng)前匹配元素上為后代元素selector綁定的events事件的事件處理函數(shù)handler。
如果省略參數(shù)selector,則移除為任何元素綁定的事件處理函數(shù)。
參數(shù)selector必須與通過on()函數(shù)添加綁定時(shí)傳入的選擇器一致。
如果省略參數(shù)handler,則移除指定元素指定事件類型上綁定的所有事件處理函數(shù)。
如果省略了所有參數(shù),則表示移除當(dāng)前元素上為任何元素綁定的任何事件類型的任何事件處理函數(shù)。
返回值
off()函數(shù)的返回值為jQuery類型,返回當(dāng)前jQuery對(duì)象本身。
實(shí)際上,off()函數(shù)的參數(shù)全是篩選條件,只有匹配所有參數(shù)條件的事件處理函數(shù)才會(huì)被移除。參數(shù)越多,限定條件就越多,被移除的范圍就越小。
off()方法的代碼示例:
容易忽略的點(diǎn):off所解除元素的綁定事件,其中選擇器必須和on綁定事件時(shí)所用的選擇器一致。
html代碼
<input id="btn1" type="button" value="點(diǎn)擊1" /> <input id="btn2" type="button" value="點(diǎn)擊2" /> <a id="a1" href="#">CodePlayer</a>
頁面加載時(shí)執(zhí)行的jquery代碼
function btnClick1(){ alert( this.value + "-1" ); } function btnClick2(){ alert( this.value + "-2" ); } var $body = $("body"); // 給按鈕1綁定點(diǎn)擊 $body.on("click", "#btn1", btnClick1 ); // 給按鈕2綁定點(diǎn)擊 $body.on("click", "#btn2", btnClick2 ); //為所有a元素綁定click、mouseover、mouseleave事件 $body.on("click mouseover mouseleave", "a", function(event){ if( event.type == "click" ){ $body.off("click", "#btn1");//取消btn1的綁定事件。成功執(zhí)行 alert("點(diǎn)擊事件"); alert("ddd"); }else if( event.type == "mouseover" ){ $(this).css("color", "red"); }else{ $(this).css("color", "blue"); } }); // 移除body元素為所有button元素的click事件綁定的事件處理函數(shù)btnClick2 // 點(diǎn)擊按鈕,btnClick1照樣執(zhí)行 $body.off("click", ":button", btnClick2); // 點(diǎn)擊按鈕1,不會(huì)執(zhí)行任何事件處理函數(shù) // $body.off("click", "#btn1"); // 注意: $body.off("click", ":button"); 無法移除btn1的點(diǎn)擊事件,off()函數(shù)指定的選擇器必須與on()函數(shù)傳入的選擇器一致。 // 移除body元素為所有元素(包括button和<a>元素)的click事件綁定的所有處理函數(shù) // 點(diǎn)擊按鈕或鏈接,都不會(huì)觸發(fā)執(zhí)行任何事件處理函數(shù) // $("body").off("click"); // 移除body元素為所有元素的任何事件綁定的所有處理函數(shù) // 點(diǎn)擊按鈕,或點(diǎn)擊鏈接或者鼠標(biāo)移入/移出鏈接,都不會(huì)觸發(fā)執(zhí)行任何事件處理函數(shù) // $("body").off( );
on()函數(shù)用于為指定元素的一個(gè)或多個(gè)事件綁定事件處理函數(shù)。
此外,你還可以額外傳遞給事件處理函數(shù)一些所需的數(shù)據(jù)。
從jQuery 1.7開始,on()函數(shù)提供了綁定事件處理程序所需的所有功能,用于統(tǒng)一取代以前的bind()、 delegate()、 live()等事件函數(shù)。
即使是執(zhí)行on()函數(shù)之后新添加的元素,只要它符合條件,綁定的事件處理函數(shù)也對(duì)其有效。
此外,該函數(shù)可以為同一元素、同一事件類型綁定多個(gè)事件處理函數(shù)。觸發(fā)事件時(shí),jQuery會(huì)按照綁定的先后順序依次執(zhí)行綁定的事件處理函數(shù)。
要?jiǎng)h除通過on()綁定的事件,請(qǐng)使用off()函數(shù)。如果要附加一個(gè)事件,只執(zhí)行一次,然后刪除自己,請(qǐng)使用one()函數(shù)。
該函數(shù)屬于jQuery對(duì)象(實(shí)例)。
語法
jQuery 1.7 新增該函數(shù)。其主要有以下兩種形式的用法:
用法一:
jQueryObject.on( events [, selector ] [, data ], handler )
用法二:
jQueryObject.on( eventsMap [, selector ] [, data ] )
參數(shù)
參數(shù) | 描述 |
---|---|
events | String類型一個(gè)或多個(gè)用空格分隔的事件類型和可選的命名空間,例如"click"、"focus click"、"keydown.myPlugin"。 |
eventsMap | Object類型一個(gè)Object對(duì)象,其每個(gè)屬性對(duì)應(yīng)事件類型和可選的命名空間(參數(shù)events),屬性值對(duì)應(yīng)綁定的事件處理函數(shù)(參數(shù)handler)。 |
selector | 可選/String類型一個(gè)jQuery選擇器,用于指定哪些后代元素可以觸發(fā)綁定的事件。如果該參數(shù)為null或被省略,則表示當(dāng)前元素自身綁定事件(實(shí)際觸發(fā)者也可能是后代元素,只要事件流能到達(dá)當(dāng)前元素即可)。 |
data | 可選/任意類型觸發(fā)事件時(shí),需要通過event.data傳遞給事件處理函數(shù)的任意數(shù)據(jù)。 |
handler | Function類型指定的事件處理函數(shù)。 |
關(guān)于參數(shù)events中可選的命名空間,請(qǐng)參考最下面的示例代碼。
關(guān)于參數(shù)selector,你可以簡(jiǎn)單地理解為:如果該參數(shù)等于null或被省略,則為當(dāng)前匹配元素綁定事件;否則就是為當(dāng)前匹配元素的后代元素中符合selector選擇器的元素綁定事件。
參數(shù)handler中的this指向當(dāng)前匹配元素的后代元素中觸發(fā)該事件的DOM元素。如果參數(shù)selector等于null或被省略,則this指向當(dāng)前匹配元素(也就是該元素)。
on()還會(huì)為handler傳入一個(gè)參數(shù):表示當(dāng)前事件的Event對(duì)象。
參數(shù)handler的返回值與DOM原生事件的處理函數(shù)返回值作用一致。例如"submit"(表單提交)事件的事件處理函數(shù)返回false,可以阻止表單的提交。
如果事件處理函數(shù)handler僅僅只為返回false值,可以直接將handler設(shè)為false。
返回值
on()函數(shù)的返回值為jQuery類型,返回當(dāng)前jQuery對(duì)象本身。
重要說明:
on()函數(shù)并不是為當(dāng)前jQuery對(duì)象匹配的元素綁定事件處理函數(shù),而是為它們的后代元素中符合選擇器selector參數(shù)的元素綁定事件處理函數(shù)。on()函數(shù)并不是直接為這些后代元素挨個(gè)綁定事件,而是委托給當(dāng)前jQuery對(duì)象的匹配元素來處理。由于DOM 2級(jí)的事件流機(jī)制,當(dāng)后代元素selector觸發(fā)事件時(shí),該事件會(huì)在事件冒泡中傳遞給其所有的祖輩元素,當(dāng)事件流傳遞到當(dāng)前匹配元素時(shí),jQuery會(huì)判斷是哪個(gè)后代元素觸發(fā)了事件,如果該元素符合選擇器selector,jQuery就會(huì)捕獲該事件,從而執(zhí)行綁定的事件處理函數(shù)。
以上就是小編為大家?guī)淼臏\談jquery之on()綁定事件和off()解除綁定事件全部?jī)?nèi)容了,希望大家多多支持腳本之家~
- JQuery綁定事件四種實(shí)現(xiàn)方法解析
- jquery綁定事件 bind和on的用法與區(qū)別分析
- jQuery事件綁定和解綁、事件冒泡與阻止事件冒泡及彈出應(yīng)用示例
- jquery 給動(dòng)態(tài)生成的標(biāo)簽綁定事件的幾種方法總結(jié)
- jQuery使用bind函數(shù)實(shí)現(xiàn)綁定多個(gè)事件的方法
- jQuery綁定事件方法及區(qū)別(bind,click,on,live,one)
- jQuery中的on與bind綁定事件區(qū)別實(shí)例詳解
- jQuery on()方法綁定動(dòng)態(tài)元素的點(diǎn)擊事件無響應(yīng)的解決辦法
- 深入理解JQuery循環(huán)綁定事件
- jquery html動(dòng)態(tài)添加的元素綁定事件詳解
- jquery事件綁定方法介紹
相關(guān)文章
可以浮動(dòng)某個(gè)物體的jquery控件用法實(shí)例
這篇文章主要介紹了可以浮動(dòng)某個(gè)物體的jquery控件,實(shí)例分析了jquery控件實(shí)現(xiàn)頁面浮動(dòng)層的使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-07-07jquery實(shí)現(xiàn)點(diǎn)擊變換導(dǎo)航樣式的方法
這篇文章主要介紹了jquery實(shí)現(xiàn)點(diǎn)擊變換導(dǎo)航樣式的方法,可實(shí)現(xiàn)點(diǎn)擊導(dǎo)航菜單選項(xiàng)時(shí)動(dòng)態(tài)變換對(duì)應(yīng)選中項(xiàng)樣式的功能,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-08-08jQuery解決input元素的blur事件和其他非表單元素的click事件沖突問題
這篇文章主要介紹了jQuery解決input元素的blur事件和其他非表單元素的click事件沖突問題,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-08-08Jquery中國(guó)地圖熱點(diǎn)效果-鼠標(biāo)經(jīng)過彈出提示層信息的簡(jiǎn)單實(shí)例
本篇文章主要是對(duì)Jquery中國(guó)地圖熱點(diǎn)效果-鼠標(biāo)經(jīng)過彈出提示層信息的簡(jiǎn)單實(shí)例進(jìn)行了介紹,需要的朋友可以過來參考下,希望對(duì)大家有所幫助2014-02-02