如何在不使用jQuery的情况下解除通过jQuery绑定的事件处理程序

3

假设我有以下的jQuery代码:

$('#myelement').bind('click', foo);

如何在不使用jQuery的情况下取消绑定此事件?

此事件不会出现在DOM元素的任何这些方法中:

var domElement = document.getElementById('myelement');
domElement.onclick // == null
domElement.click // == undefined

那么,我如何解除绑定,而不使用 jQuery,如下所示?
$('#myelement').unbind()

纯粹出于好奇,你为什么想要这样做? - Ender
1个回答

2
如果您使用的是最新版本的jQuery,则可以使用以下代码:
delete $.cache[document.getElementById("myelement")[$.expando]].events.click;

您可以在这里进行测试

请注意,这不是完全的清理,如果您想清除所有处理程序,可以使用jQuery的.removeEvent()实现。


这个可以工作。不过使用 jQuery 变量而不是 $ 更好,不是吗?另外,有没有一种方法可以禁用 jQuery 对元素事件的钩子? - Senseful
@Senseful - 两个变量都可以使用,我为了简洁起见使用了 $,使用jQuery更加安全 :) 对于第二个问题...我不确定你在问什么,你想要防止它首先绑定吗? - Nick Craver
1
请注意,此方法确实使用了jQuery。如果您无论如何都要“使用”jQuery,为什么不直接使用API解除处理程序的绑定呢?它只会按照这个建议去做。 - Pointy
@Pointy - 没有办法使用实际的jQuery对象,因为处理程序本身存储在jQuery.cache中,如果没有jQuery,则根本不需要此代码... 因为没有绑定任何内容。然而,如果有jQuery存在,则使用.unbind()为什么不可以呢? - Nick Craver
@livbetter 如果jQuery改变了它的事件处理系统,那么这可能是正确的。 - Pointy
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接