我正在使用Ben Alman的jQuery限制 - debounce脚本,并且在触发时我继续遇到未捕获的TypeError。
还应该说我使用Twitter Bootstrap作为响应式设计的框架,并且在页面上也有一些同步的CarouFredSels。
我得到的错误是这样的: 未捕获的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 );
}
};
我对这个剧本并不熟悉,因为它在我被要求接管之前就已经存在了。当用户点击搜索字段以切换稍后要实施的“自动完成”脚本时,将触发限制脚本。
答案 0 :(得分:2)
你必须交换参数
它是$.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_begin
为true
,callback
将仅在第一次去抖动函数调用时执行。 (在delay
毫秒之后没有调用限制函数后,内部计数器被重置)
callback (Function)
延迟毫秒后要执行的函数。执行debounced-function时,this
上下文和所有参数将按原样传递给callback
。