1

在我的应用程序中,我想根据地址更新谷歌地图并放置用户类型。因为我不希望应用程序每次用户输入 1 个字母时都更改地图,所以我搜索了一些东西来降低函数调用的数量。因为超时只会延迟对函数的调用(该函数将被调用,就好像它没有延迟一样),我搜索了替代方案并找到了 jQUery debounce,我尝试像这样实现它:

$('input.locatie-input').on('input', $.debounce(function () {
        console.log('changed');
        initializeMap();
    }, 500));

但我不断收到以下错误:

Uncaught TypeError: undefined is not a function

参考以下行:

 $('input.locatie-input').on('input', $.debounce(function () {

我做错了什么,并且在这种情况下要消除抖动?

更新:

Roko C. Buljan 的回答是有效的,去抖插件也一样

去抖插件代码:

_.debounce = function(func, wait, immediate) {
var timeout;
return function() {
    var context = this, args = arguments;
    var later = function() {
        timeout = null;
        if (!immediate) func.apply(context, args);
    };
    var callNow = immediate && !timeout;
    clearTimeout(timeout);
    timeout = setTimeout(later, wait);
    if (callNow) func.apply(context, args);
};
};
4

2 回答 2

4

看到这个:jsBin 演示

var timeo;                                         // Define timeout var.
$('input.locatie-input').on('input', function(){   // As one types
    clearTimeout(timeo);                           // clear a running timeout
    timeo = setTimeout(initializeMap, 500);        // and set a new one
});
于 2014-12-02T22:08:51.850 回答
1

David Walsh 有一篇关于去抖动的优秀文章。然而,Roko 是正确的。

http://davidwalsh.name/function-debounce

于 2014-12-02T22:18:24.813 回答