如何使用纯JS删除事件监听器,在jQuery中设置?

时间:2014-08-05 18:59:58

标签: javascript jquery addeventlistener event-listener

我有一种情况,使用jQuery的.on来在动态元素上设置click eventlistener:

$('body').on('click', '#email-me', function() {
    call my code....
});

以及稍后在页面中,我必须删除这个监听器 - 但是 - 这是捕获 - 我再也无法访问jQuery(长篇故事),这意味着纯粹的js ......

所以,我不能使用unBind(),即使我在那里命名我的匿名函数,它仍然不会删除事件监听器。

如何删除绑定,因此该元素不再可点击?

感谢阅读!

1 个答案:

答案 0 :(得分:2)

你做不到。 jQuery事件的处理方式与普通的javascript事件不同。

使用jQuery向元素添加事件时,遵循以下步骤:

  1. 如果元素尚未使用内部(jquery内部)datacache进行初始化,则会使用datacache初始化该元素,然后返回datacache。
  2. 如果这是为该事件类型添加的第一个事件处理程序,则会为执行jQuery.event.dispatch的事件类型的元素添加特殊事件
  3. 最后,您传入的处理程序将添加到datacache。
  4. 因此,删除此事件的唯一方法是获取jQuery绑定触发jQuery.event.dispatch特殊事件处理程序,但由于您无法访问jQuery,你无法获得该事件处理程序。 (即使访问jQuery,我认为你不能得到那个处理程序。)

    您需要找到一种方法来保留对jQuery的访问权限,或者根本不使用它。