2015-06-29 43 views
0

聲明的函數調用我在jQuery中使用.on()函數將事件分配給函數。jQuery - 延遲所有與.on

var someEvent = getEventName(someParams); // gets the event, like 'click' 

var someFunctionReference = getFunctionNameBasedOnParams(someParams); // gets the function reference 

$('.myElement').on(someEvent, someFunctionReference); 

我想什麼做的是包裝「someFunctionReference」超時內或延緩它的點火器(通過一段時間,可以說,250毫秒),而不必去修改由該方法返回的每一個功能。

有沒有辦法做到這一點?

+0

難道你不能只修改'getFunctionNameBasedOnParams'中的代碼,以便它返回一個包含延遲的函數嗎? –

回答

2

我假設你不能修改getFunctionNameBasedOnParams中的代碼,所以你所要做的就是創建另一個函數,它返回一個封裝在定時器中的函數。

function delayFunc(fn, ms) { 
    return function() { 
     var args = arguments; 
     setTimeout(function() { 
      fn.apply(this, args); 
     }, isNaN(ms) ? 100 : ms); 
    } 
} 

然後將您的功能傳遞給它。

var someFunctionReference = delayFunc(getFunctionNameBasedOnParams(someParams), 250); 

要知道,你的處理程序的返回值現在是沒有意義的,所以如果你return false,它不會有任何效果。