ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
### 返回值:jQueryoff(events,[selector],[fn]) ### 概述 在选择元素上移除一个或多个事件的事件处理函数。 off() 方法移除用[.on()](http://api.jquery.com/on)绑定的事件处理程序。有关详细信息,请参阅该网页上delegated和directly绑定事件。特定的事件处理程序可以被移除元素上提供事件的名称,命名空间,选择器,或处理函数名称的组合。**当有多个过滤参数,所提供的参数都必须匹配的事件处理程序被删除。** 如果一个简单的事件名称,比如提供"click",*所有* 这种类型的事件(包括直接和委派)从jQuery设置的元素上删除。当编写代码,将作为一个插件使用,或者干脆当一个大的代码基础工作,最好的做法是安装和取下使用命名空间的事件,从而使代码不会无意中删除其他代码附加事件处理程序。在一个特定的命名空间中的所有类型的所有事件,可以从一个元素中删除,只是提供了一个命名空间,比如 ".myPlugin"。至少,无论是命名空间或事件名称必须提供。 要删除特定的委派事件处理程序,提供一个selector 的参数。选择器字符串必须是完全匹配递到.on()事件处理程序附加的选择器。要删除非委托元素上的所有事件,使用特殊值 "**" 。 处理程序也可以删除handler参数指定名称的函数。当jQuery的绑定一个事件处理程序,它分配一个唯一的ID给处理函数。函数用[jQuery.proxy()](http://api.jquery.com/jQuery.proxy)代理或类似有相同的唯一ID机制(代理函数),因此,通过代理处理程序.off 可能会删除比预期更多的处理程序。在这些情况下,最好是附加和移除事件处理程序,使用命名空间。 和.on()一样,你可以传递一个 events-map>参数明确的指定而不是用events 和 handler作为单独参数。键事件和/或命名空间;值是处理函数或为false的特殊价值。 ### 参数 #### **events,[selector],[fn]***V1.7* **events**:一个或多个空格分隔的事件类型和可选的命名空间,或仅仅是命名空间,比如"click", "keydown.myPlugin", 或者 ".myPlugin". **selector**:一个最初传递到.on()事件处理程序附加的选择器。 **fn**:事件处理程序函数以前附加事件上,或特殊值false. #### **events-map,[selector]***V1.7* **events-map**:一个用字符串表示的,一个或多个空格分隔的事件类型和可选的命名空间,值表示先前事件绑定的处理函数。 **selector**:一个最初传递到.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"); ~~~