0

Я использую джейлбрейк jQuery Ben Alman - скрипт debounce, и я продолжаю работать в Uncaught TypeError, когда он запускается.jQuery Throttle - Debounce | callback.apply не является функцией

Следует также сказать, что я использую Twitter Bootstrap в качестве основы для гибкого дизайна, и на странице также есть несколько синхронизированных CarouFredSels.

Ошибки я получаю это: Uncaught TypeError: callback.apply не является функция jquery.ba-дроссельный-debounce.js: 149

Я смотрю на линии 149, и это является областью проценты:

function wrapper() { 
     var that = this, 
     elapsed = +new Date() - last_exec, 
     args = arguments; 

     function exec() { 
     last_exec = +new Date(); 
     callback.apply(that, args); //LINE 149// 
     }; 

     function clear() { 
     timeout_id = undefined; 
     }; 

     if (debounce_mode && !timeout_id) { 
     exec(); 
     } 

     timeout_id && clearTimeout(timeout_id); 

     if (debounce_mode === undefined && elapsed > delay) { 
     exec(); 

     } else if (no_trailing !== true) { 
     timeout_id = setTimeout(debounce_mode ? clear : exec, debounce_mode === undefined ? delay - elapsed : delay); 
     } 
    }; 

Я не очень хорошо знаком с этим скриптом, так как он был на месте, прежде чем меня попросили взять на себя. Сценарий дроссельной заслонки запускается, когда пользователь нажимает на поле поиска, которое переключает сценарий «автозаполнения», который будет реализован позже.

JFIDDLE

+0

Если вы собираетесь добавить скрипку, она должна «работать» (как показано в вашей ошибке), иначе ее довольно бессмысленно. – Jamiec

+0

jfiddle "работает" сейчас. – Murphy1976

+0

'Ошибка: для JavaScript Bootstrap требуется jQuery' - ваша скрипка даже не включает версию jquery, в которой вы находитесь. – Jamiec

ответ

1

Вы должны поменять параметры.
Это $.debounce(delay, callback) и не $.debounce(callback, delay)


jQuery.debounce

исполнение Debounce функции. Дебатирование, в отличие от дросселирования, гарантирует, что функция выполняется только один раз, либо в самом начале серии вызовов, либо в самом конце. Если вы хотите просто ограничить выполнение функции функцией, см. Метод jQuery.throttle.

Использование

var debounced = jQuery.debounce(delay, [ at_begin, ] callback); 

jQuery('selector').bind('someevent', debounced); 
jQuery('selector').unbind('someevent', debounced); 

Аргументы

delay (Number)
Ноль или больше-задержка в миллисекундах. Для обратных вызовов событий наиболее полезны значения около 100 или 250 (или даже выше).

at_begin (Boolean)
Необязательный, по умолчанию false. Если at_begin является ложным или неопределенным, обратный вызов будет выполняться только delay миллисекунд после последнего вызова функции деблокирования. Если at_begin - true, callback будет выполнен только при первом вызове функции деблокирования. (После того, как дросселирование-функция не была вызвана для delay миллисекунд, внутренний счетчик сбрасывается)

callback (Function)
функция должна быть выполнена после того, как задержки миллисекунд. Контекст и все аргументы передаются через as-is в callback, когда выполняется функция debounced.

+0

большое спасибо ... Я смотрел на него так сильно, что даже не заметил, что аргументы были перевернуты. – Murphy1976