jquery保持实时过滤器符合快速击键

时间:2012-02-23 20:44:11

标签: javascript jquery

  

可能重复:
  Run javascript function when user finishes typing instead of on key up?

我写了一个快速实时过滤器,它将过滤大约一万个项目的长列表。每个项目的子项都有大量与之相关的元数据。描述,相关文件,用途等。我一次带来一封信,并从那里过滤页面。如果某人输入太快,页面可能无法跟上。如果我要快速输入'Cam',我可能会收到tag-C的多个IDS。

我的问题问是否有办法限制函数调用,直到击键停止。几乎是一个悬停的击键内容。

这是一个快速的小提琴我掀起了关于我所追求的事情,http://jsfiddle.net/kb8Hw/ 但我的代码有点复杂。我有一个更长的列表,一次将其限制为一个字母,并将搜索字符串标准化一点。基本上每次this.value[0]更改它都会返回服务器并获取一组新标签。从那里我使用jquery过滤页面上的内容。

2 个答案:

答案 0 :(得分:3)

启动计时器。在每次按键时重置它。当用户停止输入(300-600毫秒是好的)时,计时器将会激活。打电话给你的功能。

答案 1 :(得分:1)

通常,您会使用clearTimeoutsetTimeout来触发真实搜索。

在keyup上,不是直接进行搜索,而是启动一个定时器,该定时器将在500ms后执行搜索。

clearTimeout调用是在前一个keyup上启动任何先前的计时器(你输入的每个字母的keyup事件)。

示例:

var to;

$('#live-search').on('keyup', '#live-search-box', function() {
    var val = this.value;
    clearTimeout(to);
    to = setTimeout(function() {
        $('#countries').find('span').show();
        if (val) {

            $('#countries').find('span').hide();
            $('#countries').find('span[id^=' + val.toLowerCase() + ']').fadeIn('fast');

        }
    }, 500);
});

<强> DEMO