用户停止输入后运行功能

时间:2014-12-02 22:06:00

标签: jquery debouncing

在我的应用程序中,我想根据adres更新谷歌地图,并放置用户类型。 因为我不希望应用程序每次更改地图时用户输入1个字母,我搜索了一些东西来降低ammount off函数调用。因为超时只会延迟对函数的调用(该函数将被调用,就好像它没有延迟一样),我搜索了替代方案并找到了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插件也是这样做的

debounce插件代码:

_.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);
};
};

2 个答案:

答案 0 :(得分:4)

请参阅: jsBin demo

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
});

答案 1 :(得分:1)

David Walsh对于去抖动有一个很好的写作。然而Roko是正确的。

http://davidwalsh.name/function-debounce