【问题标题】:jQuery Throttle - Debounce | callback.apply is not a functionjQuery Throttle - 去抖动 | callback.apply 不是一个函数
【发布时间】:2016-03-14 22:29:06
【问题描述】:

我正在使用 Ben Alman 的 jQuery 油门 - debounce 脚本,当它被触发时,我一直遇到 Uncaught TypeError。

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

我得到的错误是: Uncaught TypeError: callback.apply is not a function 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

【问题讨论】:

  • 如果你要添加一个小提琴,它需要“工作”(如显示你的错误)否则它毫无意义。
  • jfiddle 现在“工作”了。
  • Error: Bootstrap's JavaScript requires jQuery - 你的小提琴甚至不包括你正在使用的 jquery 版本。
  • 嗯...结果显示正确...您的浏览器缓存了吗?
  • 阅读documentation ;) 是$.debounce(delay, callback) 而不是$.debounce(callback, delay)

标签: jquery twitter-bootstrap caroufredsel typeerror throttling


【解决方案1】:

您必须交换参数。
这是$.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

【讨论】:

  • 非常感谢...我看得很用力,我什至没有注意到论点被颠倒了。
猜你喜欢
  • 2017-07-28
  • 1970-01-01
  • 2016-07-24
  • 1970-01-01
  • 1970-01-01
  • 2015-03-03
  • 1970-01-01
  • 1970-01-01
  • 2017-04-27
相关资源
最近更新 更多