jQuery unbind监听器

时间:2012-10-11 08:30:00

标签: events triggers event-handling 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继续工作?

2 个答案:

答案 0 :(得分:1)

保存对处理程序的引用,以便稍后unbind

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


$(document).bind("a.b.c", listener);

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

答案 1 :(得分:0)

我找到了更好的解决方案Namespaced Events

// 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

进行调用