jquery自动建议和超时

jquery自动建议和超时,jquery,autocomplete,settimeout,Jquery,Autocomplete,Settimeout,我已经实现了一个为查询的自动建议找到的脚本。问题是,每次我按下一个键,他都在调用脚本。我试图添加一个超时,但它仍然制造麻烦。 代码如下: <input type="text" onkeyup="lookup(this.value);"> function lookup(inputString) { var time = new Date().getTime(); var dummy_trigger = true; if(inputString.length == 0) {

我已经实现了一个为查询的自动建议找到的脚本。问题是,每次我按下一个键,他都在调用脚本。我试图添加一个超时,但它仍然制造麻烦。 代码如下:

<input type="text" onkeyup="lookup(this.value);">

function lookup(inputString) {
 var time = new Date().getTime();
 var dummy_trigger = true;
 if(inputString.length == 0) {
  $('#suggestions').fadeOut(); // Hide the suggestions box
 } else {
 function timepassed(){
  now = new Date().getTime() - time;

  if(now > 3000 && dummy_trigger){
    alert("search");
    dummy_trigger = false;
  }
 }
 setInterval(timepassed, 1000);
 }
}

函数查找(inputString){
var time=new Date().getTime();
var虚拟_触发器=真;
如果(inputString.length==0){
$(“#建议”).fadeOut();//隐藏建议框
}否则{
函数timepassed(){
现在=新日期().getTime()-时间;
如果(现在>3000&&dummy\u触发器){
警报(“搜索”);
伪触发=假;
}
}
设置间隔(时间经过,1000);
}
}

有什么想法吗?谢谢

由于您已经在使用jQuery,请添加自动完成插件,或者使用jQuery UI替换该插件


这里是该插件的链接,以及关于jQuery UI转换的注释。它还有关于插件的说明:

尽管其他人通过发送给您使用自动完成插件来回答这个问题,但这并不能真正回答“如何使脚本不会在每次按键时启动?”

为什么这很重要? 零延迟对于本地数据来说是有意义的(响应性更强),但是可以为远程数据产生大量负载,而响应性较差。如果每次击键后都启动搜索,那么用户只需启动13次搜索来搜索单词“菊花”,这时脚本应该等到用户不知道如何键入单词的其余部分,然后启动搜索

尽管大多数自动完成/自动建议脚本都有一个超时变量 下面是如何实现您自己的计时器,它使用jQuery等待用户:

<input type="text" id="query" />

发生的情况如下:我们将
setTimeout
计时器分配给一个变量,该变量必须在
keyup
函数上方声明,并在每次
keyup
触发时检查该变量。如果有一个现有的
setTimeout
正在进行,请清除它,这样它就不会启动
search()
函数,并创建一个新的计时器集,以等待指定的毫秒数(在我的示例中为1000)。

jQuery UI有一个自动完成。。。我建议你用那个-
$(document).ready(function() {
    var timer,
        $suggestions = $('#suggestions'),
        $search_box = $('#query');

    $search_box.keyup(function() {
        if (timer) {
            // There is a running timer from a previous keyup
            // Clear this timer so we don't have overlap
            clearTimeout(timer);
        }

        if (this.length == 0) {
            $suggestions.fadeOut();
        } else {        
            timer = setTimeout(function() {
                search();
            }, 1000);
        }
    });

    function search() {
        var query = $search_box.val();
        alert('searching for ' + query);
    }
});