我有一个全局对象
e.g
var globalVar ={};
function handlerGlobalVar (input) {/* do something */}
在多个地方,我会尝试从这个globalVar中听一个事件
e.g
$(globalVar).on("my-event", handlerGlobalVar);
为了保持我的代码清洁,并避免注册太多事件,我想在我完成使用时取消注册该事件。所以会尝试做
$(globalVar).off("my-event", handlerGlobalVar );
然而,当我从一个地方执行“关闭”时,它将关闭所有“我的事件”处理程序,如果其中一个执行“关闭”,它们都不起作用
有关如何解决我的问题的任何建议吗?
谢谢!
答案 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);
现在由于使用了命名空间,这将仅删除第一次注册
但是,如果您只想触发处理程序一次,请使用.one()
演示:Fiddle