2013-07-28 53 views
1

當我申請上() - 處理我更喜歡下面的符號,如果我有一個以上的應用:不同方式jQuery的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'); 

我敢打賭,關() - 事情是容易的,但我的編碼在過去的15小時後沒有得到它。

回答

2

如果你傳遞一個對象.on()列出超過一個事件,你可以(與任何JavaScript對象字面)加上引號的屬性名稱,如果你需要的屬性名稱包含一個點:

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

按照.off() documentation你可以列出所有的處理程序中相同的字符串,有或沒有命名空間刪除多個處理器與一個呼叫:

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

請注意,如果你給雙方你的事件相同的namespac E:

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

...那麼你可以通過指定只是名稱空間中刪除它們:

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

THX,我知道過的是輕鬆,試圖除了沒有逗號一切。只有一個命名空間的好處,正是我所需要的。我正在第一次探索命名空間。 Thx爲您的時間和幫助。 – hyde