2014-04-04 27 views
2

我曾經在多個地方一個全局對象如何從一個對象

e.g 
    var globalVar ={}; 
    function handlerGlobalVar (input) {/* do something */} 

取消註冊一個jQuery的事件中,我將試圖從這個globalVar聽一個事件

e.g 
    $(globalVar).on("my-event", handlerGlobalVar); 

爲了讓我的代碼乾淨,並避免註冊太多事件,我想在我完成使用時取消註冊事件。所以會盡量做到

$(globalVar).off("my-event", handlerGlobalVar); 

然而,當我從一個地方執行「關」,它會關閉所有的「我的事件」處理程序,沒有人會,如果他們中的一個執行「關」

工作

任何建議如何解決我的問題?

謝謝!

+0

什麼globalVar將存儲?一系列選擇器?你的代碼在哪裏執行你的工作? –

回答

0

我想你在找什麼是namespaced event handler registration,所以儘量

$(globalVar).on("my-event.mynamepsace1", handlerGlobalVar); 
$(globalVar).on("my-event.mynamepsace2", handlerGlobalVar); 

然後

$(globalVar).off("my-event.mynamepsace1", handlerGlobalVar); 

現在這將REM奧雅納只有第一個報名,因爲使用

演示的命名空間:FiddleProblem


但是,如果你想火的處理器只有一次,然後用.one()

演示:Fiddle

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'); 
    });