off()方法用于精准解绑事件:可移除单个事件类型、按选择器和函数引用精准解绑、批量清除全部或按命名空间过滤,且hover需拆为mouseenter/mouseleave处理。

需要在网页运行中动态取消某个按钮的点击响应,或移除一组元素上通过on()绑定的hover效果,又或者清理掉因重复初始化导致的多重事件监听——这些都得靠off()方法精准控制。
基础解绑:移除单个事件类型
第一步:选中已绑定事件的目标元素,例如所有class为“submit-btn”的按钮。
第二步:调用.off("click"),直接清除该元素上所有通过.on()绑定的click事件处理函数。
这一步不区分是直接绑定还是事件委托,只要事件类型匹配就全部清除。如果该元素还绑定了submit、blur等其他事件,它们不受影响。
精准解绑:指定选择器与事件类型
方法一:当使用事件委托时(比如$(document).on("click", ".delete-item", handler)),必须传入完全一致的选择器字符串才能解绑:
$(document).off("click", ".delete-item");
【选择器字符串必须和on()中传入的完全相同,多一个空格、少一个点都会失败】
方法二:若想只移除某一个特定的处理函数,需同时提供事件类型、选择器和函数引用:
const myHandler = function(){ alert("deleted"); };
$(document).on("click", ".delete-item", myHandler);
$(document).off("click", ".delete-item", myHandler);
jQuery 1.12.4是jQuery 1.x系列的最后一个正式稳定版本,由jQuery团队于2016年发布。该版本主要面向需要兼容旧版浏览器环境的网站和Web应用,尤其适用于仍需支持Internet Explorer 6、Internet Explorer 7、Internet Explorer 8等老旧浏览器的项目。
批量解绑:清空全部或按命名空间过滤
执行$(element).off()不带任何参数,会移除该元素上所有通过.on()绑定的事件,包括直接绑定和委托绑定。
如果项目中大量使用了命名空间(如"click.myModule"、"input.formValidation"),可直接用.off(".myModule")一键清除整个命名空间下的所有事件类型。
注意:仅传入命名空间(如".myPlugin")时,无需指定事件类型,但至少要有一个点开头。
特殊场景:解除hover类复合事件
jQuery的.hover()本质是mouseenter + mouseleave的封装,不能直接.off("hover")。
必须拆开写成.off("mouseenter mouseleave"),或更稳妥地指定具体选择器:
$("#menu").off("mouseenter mouseleave", "a");
如果之前是用$(document).on("mouseenter", ".nav-link", fn)绑定的,则必须用$(document).off("mouseenter", ".nav-link")来对应解绑。










