带计时器的OnKeyUp事件?

时间:2012-12-11 18:36:20

标签: javascript jquery

JQuery对我来说是一个新手,我使用ajax建立了一个搜索建议系统,该系统工作得很好但由于onKeyUp限制而工作得很慢。经过一番阅读后,我发现我可以在事件上设置一个计时器。所以我要做的是在'prod-name-input'输入字段onKeyUp事件上设置一个计时器,以便每2秒调用一次。我在网上找到了一些这样的例子,但是我无法将它们中的任何一个成功地应用到我的代码中,我想知道是否有人可以告诉我这是如何工作的?非常感谢提前。

我的输入字段

<input onKeyUp="search(this.value)" type="text" class="prod-name-input"/>

JS

function search(searchword) {
        $('.smart-suggestions').load('invoice-get-data.php?searchword=' + searchword);  
    }

2 个答案:

答案 0 :(得分:4)

最快的方法实际上是使用keydown事件。 (它作用于按键而不是被释放,而且总是更快。)

var timer;
$(".prod-name-input").keydown(function(){
    var self = this;
    clearTimeout(timer);
    timer = setTimeout(function(){
        $(".smart-suggestions").load('invoice-get-data.php?searchword=' + self.value);
    },250);
});

如果用户停止输入超过1/4秒,则会加载结果。如果发生的请求太多,请将延迟时间增加到500.

我将逐行查看代码:

// declare a variable that will hold a reference to the timer we create
var timer;
// bind a keydown event to all existing elements that have the prod-name-input class
$(".prod-name-input").keydown(function(){
    // store a reference to the clicked element so we can access it inside of setTimeout()
    var self = this;
    // clear existing timer stored in the timer variable (if any)
    clearTimeout(timer);
    // create a new timer and store it in the timer variable
    timer = setTimeout(function(){
        // load content
        $(".smart-suggestions").load('invoice-get-data.php?searchword=' + self.value);
    // give the timer a 250ms delay (0.25 seconds or 1/4 of a second)
    },250);
});

答案 1 :(得分:0)

underscore.js中有一个处理此场景的限制功能。您可以在项目中看到他们的annotated source,或者如果您在项目中使用了underscore.js,则可以使用一些使用文档here