2015-06-29 2 views
0

Я использую функцию .on() в jQuery для назначения функций событиям.jQuery - задержка всех вызовов функций, объявленных с .on

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

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

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

То, что я хотел бы сделать, это обернуть «someFunctionReference» внутри тайм-аута или задержать его обжиг (на какое-то время, позволяет сказать, что 250ms) без необходимости идти и изменять каждую функцию, которая возвращается методом.

Есть ли способ сделать это?

+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, это не будет иметь никакого эффекта.

Смежные вопросы