jQuery on()处理程序(包括命名空间)的不同表示法

时间:2013-07-28 00:47:54

标签: jquery namespaces onclick notation

当我申请on() - 处理程序时,如果我有多个申请,我更喜欢以下表示法:

$(window).on({
    keyup: function (e) {
        applyKeyEvents(e, modal);
    },
    click: function (e) {
        applyMouseEvents(e, modal);
}

有人知道如何在这种表示法中设置命名空间吗?

我在这种情况下解决了问题,回到了一个符号:

$(window).on('click.modalClickClose', function (e) {
    applyMouseEvents(e, modal);
});

$(window).on('keyup.modalKeyClose', function (e) {
    applyKeyEvents(e, modal);
});

但我真的不想重复自己。使用off() - 方法与多个处理程序相同的问题/问题。

这有效:

$(window).off('click.modalClickClose');
$(window).off('keyup.modalKeyClose');

我打赌off() - 事情很简单,但是在过去的15个小时后我没有得到它。

1 个答案:

答案 0 :(得分:2)

如果您要将对象传递给.on()以列出多个事件,您可以(与任何JavaScript对象文字一样)将属性名称放在引号中,如果您需要包含点的属性名称:< / p>

$(window).on({
    "keyup.modalKeyClose" : function (e) {
        applyKeyEvents(e, modal);
    },
    "click.modalClickClose" : function (e) {
        applyMouseEvents(e, modal);
    }
});

根据.off() documentation,您可以通过在同一个字符串中列出所有处理程序(包含或不包含名称空间)来删除多个处理程序:

$(window).off("keyup.modalKeyClose click.modalClickClose");

请注意,如果您要为两个事件指定相同的命名空间:

$(window).on({
    "keyup.modalClose" : function (e) {
        applyKeyEvents(e, modal);
    },
    "click.modalClose" : function (e) {
        applyMouseEvents(e, modal);
    }
});

...然后您可以通过仅指定命名空间来删除​​它们:

$(window).off(".modalClose");