如何从对象中取消注册一个jquery事件

时间:2014-04-04 06:58:17

标签: javascript jquery events

我有一个全局对象

e.g
   var globalVar ={};
   function handlerGlobalVar (input) {/* do something */}

在多个地方,我会尝试从这个globalVar中听一个事件

e.g
     $(globalVar).on("my-event", handlerGlobalVar);

为了保持我的代码清洁,并避免注册太多事件,我想在我完成使用时取消注册该事件。所以会尝试做

$(globalVar).off("my-event", handlerGlobalVar );

然而,当我从一个地方执行“关闭”时,它将关闭所有“我的事件”处理程序,如果其中一个执行“关闭”,它们都不起作用

有关如何解决我的问题的任何建议吗?

谢谢!

2 个答案:

答案 0 :(得分:0)

.off()还有另外一个论点的余地。选择器

var _selector = <my_class_or_id_element>
$(globalVar).off("my-event", _selector, handlerGlobalVar );

示例:Fiddle

 $('#my-id').on('my-event', function() {
     alert("nonce");
     $('#my-id').off('my-event');
  });

答案 1 :(得分:0)

我认为你要找的是namespaced event handler registration,所以试试

$(globalVar).on("my-event.mynamepsace1", handlerGlobalVar);
$(globalVar).on("my-event.mynamepsace2", handlerGlobalVar);

然后

$(globalVar).off("my-event.mynamepsace1", handlerGlobalVar);

现在由于使用了命名空间,这将仅删除第一次注册

演示:FiddleProblem


但是,如果您只想触发处理程序一次,请使用.one()

演示:Fiddle