【问题标题】:Run function after user stops typing用户停止输入后运行函数
【发布时间】:2015-01-31 07:40:51
【问题描述】:

在我的应用程序中,我想根据地址更新谷歌地图并放置用户类型。 因为我不希望应用程序每次用户输入 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);
};
};

【问题讨论】:

  • 您是否在您的页面中加入了反跳javascript?
  • 该任务不需要任何 debounce 插件。
  • @RokoC.Buljan 但 OP 的代码不起作用的原因是因为他缺少插件代码对吗?
  • 你是对的@NathanKoop

标签: jquery debouncing


【解决方案1】:

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

http://davidwalsh.name/function-debounce

【讨论】:

    【解决方案2】:

    看到这个: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
    });
    

    【讨论】:

    • 这只会设置一个延迟,所以它运行 initializemap 函数的次数等于没有延迟的相同代码,对吧?我想做的是限制对函数的调用,编辑 mm jsbin 显示它没有,为什么不呢?
    • @SvenB 正如您在演示链接中看到的那样,只有一个函数调用,并且在 500 毫秒后停止输入后只有一次。如果有人再次开始打字,那太好了,同样的事情会一遍又一遍地发生。
    • @SvenB 因为你键入 clearTimeout 会清除当前运行的超时设置另一个。
    • 听起来像我需要的,但是如果我可能会问,去抖动的用途是什么,听起来它是您发布的代码的简短版本。顺便说一句,谢谢您的帮助
    • @SvenB 你能告诉我整个 debounce Plugin 代码吗?如果 Debounce Plugin 比上面的代码短,我真的很感兴趣。
    猜你喜欢
    • 2023-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-09
    • 2019-11-03
    • 1970-01-01
    相关资源
    最近更新 更多