jquery/backbone.js - 延迟函数调用

Mat*_*hew 4 javascript jquery javascript-events settimeout backbone.js

我有一个#search元素,当keyup事件发生时应触发一个函数.只有keyup在设定的时间内没有发生(例如500毫秒)时,才会触发此功能.这将阻止搜索结果更新每个按下的字母.问题是使用backbone.js,我在哈希中有我的事件,并且适用的事件如下:

'keyup #search' : 'setSearch'

setSearch()keyup事件发生时调用该函数.我现在还不清楚如何处理它.我已经尝试过各种各样的东西,但没有任何东西可以保持计时器超过功能结束.

我有类似的东西:

setSearch: function(event) {
            var timer = window.setTimeout( function() {
                // run function here
                alert('fired');
            }, 500);
    },
Run Code Online (Sandbox Code Playgroud)

而不是alert('fired'),我将有自己的功能运行.我可以看到为什么这段代码不起作用(为每个keyup发生的事件设置一个计时器.但我仍然不清楚我还能尝试什么.

Sky*_*son 18

您正在寻找的实际上是一个从underscore.js(Backbone的要求)提供给您的功能

 setSearch: _.throttle(function() {
                //Do Stuff
              }, 500),
Run Code Online (Sandbox Code Playgroud)

简而言之,这将返回一个新形式的匿名函数,每500ms只能调用一次.您可能需要根据需要调整时间.

更多信息:http: //documentcloud.github.com/underscore/#throttle

  • user1243645的评论:"我在我的项目中遇到了类似的要求.我只是想补充一下,为了回应Skylar Anderson关于`_.throttle`的帖子,我实际上发现了[`_.debounce()`](http: //documentcloud.github.com/underscore/#debounce)可以更好地满足我的需求." (10认同)