jQuery Throttle-Debounce | callback.apply不是函数



我使用的是Ben Alman的jQuery throttle-debounce脚本,当它被触发时,我一直在运行Unaught TypeError。

还应该说,我正在使用Twitter Bootstrap作为响应设计的框架,并且在页面上也有一些同步的CarouFredSels。

我得到的错误是:Uncaught TypeError:callback.apply不是函数jquery.ba throttle 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

您必须交换参数
它是$.debounce(delay, callback)而不是$.debounce(callback, delay)


jQuery.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为false或未指定,则回调将仅在最后一次去抖动函数调用后delay毫秒执行。如果at_begintrue,则callback将仅在第一次去抖动函数调用时执行。(在节流功能未调用delay毫秒后,内部计数器重置)

callback (Function)
延迟毫秒后要执行的函数。当执行去抖动函数时,this上下文和所有参数按原样传递给callback

最新更新