?
本文檔使用 PHP中文網(wǎng)手冊(cè) 發(fā)布
在選擇元素上移除一個(gè)或多個(gè)事件的事件處理函數(shù)。
off() 方法移除用.on()綁定的事件處理程序。有關(guān)詳細(xì)信息,請(qǐng)參閱該網(wǎng)頁(yè)上delegated和directly綁定事件。特定的事件處理程序可以被移除元素上提供事件的名稱,命名空間,選擇器,或處理函數(shù)名稱的組合。當(dāng)有多個(gè)過濾參數(shù),所提供的參數(shù)都必須匹配的事件處理程序被刪除。
如果一個(gè)簡(jiǎn)單的事件名稱,比如提供"click",所有 這種類型的事件(包括直接和委派)從jQuery設(shè)置的元素上刪除。當(dāng)編寫代碼,將作為一個(gè)插件使用,或者干脆當(dāng)一個(gè)大的代碼基礎(chǔ)工作,最好的做法是安裝和取下使用命名空間的事件,從而使代碼不會(huì)無意中刪除其他代碼附加事件處理程序。在一個(gè)特定的命名空間中的所有類型的所有事件,可以從一個(gè)元素中刪除,只是提供了一個(gè)命名空間,比如 ".myPlugin"。至少,無論是命名空間或事件名稱必須提供。
要?jiǎng)h除特定的委派事件處理程序,提供一個(gè)selector 的參數(shù)。選擇器字符串必須是完全匹配遞到.on()事件處理程序附加的選擇器。要?jiǎng)h除非委托元素上的所有事件,使用特殊值 "**" 。
處理程序也可以刪除handler參數(shù)指定名稱的函數(shù)。當(dāng)jQuery的綁定一個(gè)事件處理程序,它分配一個(gè)唯一的ID給處理函數(shù)。函數(shù)用jQuery.proxy()代理或類似有相同的唯一ID機(jī)制(代理函數(shù)),因此,通過代理處理程序.off 可能會(huì)刪除比預(yù)期更多的處理程序。在這些情況下,最好是附加和移除事件處理程序,使用命名空間。
和.on()一樣,你可以傳遞一個(gè) events-map>參數(shù)明確的指定而不是用events 和 handler作為單獨(dú)參數(shù)。鍵事件和/或命名空間;值是處理函數(shù)或?yàn)閒alse的特殊價(jià)值。
events:一個(gè)或多個(gè)空格分隔的事件類型和可選的命名空間,或僅僅是命名空間,比如"click", "keydown.myPlugin", 或者 ".myPlugin".
selector:一個(gè)最初傳遞到.on()事件處理程序附加的選擇器。
fn:事件處理程序函數(shù)以前附加事件上,或特殊值false.
events-map:一個(gè)用字符串表示的,一個(gè)或多個(gè)空格分隔的事件類型和可選的命名空間,值表示先前事件綁定的處理函數(shù)。
selector:一個(gè)最初傳遞到.on()事件處理程序附加的選擇器。
Remove all event handlers from all paragraphs:
$("p").off()
Remove all delegated click handlers from all paragraphs:
$("p").off( "click", "**" )
Remove just one previously bound handler by passing it as the third argument:
var foo = function () { // code to handle some kind of event }; // ... now foo will be called when paragraphs are clicked ... $("body").on("click", "p", foo); // ... foo will no longer be called. $("body").off("click", "p", foo);
Unbind all delegated event handlers by their namespace:
var validate = function () { // code to validate form entries }; // delegate events under the ".validator" namespace $("form").on("click.validator", "button", validate); $("form").on("keypress.validator", "input[type='text']", validate); // remove event handlers in the ".validator" namespace $("form").off(".validator");