如何取消绑定由全局函数定义的事件?

时间:2015-12-04 17:39:20

标签: jquery event-handling

我有一个绑定到全局函数的事件(我需要它来跟踪函数本身)。

e.g。

 window['mUpEventHandler'] = function(){
      // ...
 }

通过

绑定到$('body')
 .on('mouseup')

现在我知道我可以解除它知道处理程序的名称,如

 $('body').off(myHandler) // # myHandler = mUpEventHandler  for example

然而,当全局定义它时,我有函数本身但不是它的名字。

我如何克服这个问题?

2 个答案:

答案 0 :(得分:1)

可以使用命名空间进行绑定。然后根据命名空间删除事件?

https://css-tricks.com/namespaced-events-jquery/

window['mUpEventHandler'] = function () {
  alert('test');
}


$('body').on('mouseup.mUpEventHandler', function () {
  mUpEventHandler()
});


$('button').click(function () {
  $('body').off('.mUpEventHandler');
})

http://jsfiddle.net/SeanWessell/5p7t22mh/

答案 1 :(得分:0)

$('body').off(myHandler)中,myHandler不是"名称",它是引用功能的变量。

要取消绑定事件处理程序,您需要对该函数的引用。所以

$('body').off(mUpEventHandler)
// or
$('body').off(window.mUpEventHandler)

工作得很好。