jQuery 解绑侦听器



我在取消绑定一个侦听共享发射器之一的侦听器时遇到问题:

// this is emitter. Fire always in a.b.c namespace but with different parameters 
$(document).trigger("a.b.c", {
    p: 1,
    p2: ...
});
// listener 1
$(document).bind("a.b.c", function(e, object) {
    if (object.myParam) {
        ....
    }
});
// listener 2
$(document).bind("a.b.c", function(e, object) {
    if (object.anotherParam) {
        ....
    }
});

如何解绑侦听器 2,让侦听器 1 仍然继续工作?

保存对处理程序的引用,以便以后可以unbind它:

var listener = function(e, object) {
    if (object.anotherParam) {
        ....
    }
};

$(document).bind("a.b.c", listener);
// sometime later:
$(document).unbind("a.b.c", listener);

我找到了更好的解决方案 命名空间事件

// this is emitter. Fire always in a.b.c namespace but with different parameters 
$(document).trigger("a.b.c", {
    p: 1,
    p2: ...
});
// listener 1
$(document).bind("a.b.c.listener1", function(e, object) {
    if (object.myParam) {
        ....
    }
});
// listener 2
$(document).bind("a.b.c.listener2", function(e, object) {
    if (object.anotherParam) {
        ....
    }
});

现在绊倒a.b.c将以listener1listener2触发.要取消绑定 - 只需与特定侦听器取消绑定,例如:

$(document).unbind("a.b.c.listener1");

在这种情况下,listener2将被保留,并且能够通过命名空间a.b.c

调用

相关内容

  • 没有找到相关文章

最新更新