通过使用SetTimeOut包装来避免多个自动完成调用

时间:2010-05-03 12:09:45

标签: javascript jquery autocomplete settimeout

这是我的问题:使用自动完成jQuery插件,当用户通过围绕

攻击他的keynoard时,我想避免多个ajax请求
$('#query1').autocomplete({
                    serviceUrl:'/actions/autocomplete?population=salon',
                    minChars:3, 
                    maxHeight:300,
                    width:200,
                    clearCache:true,
                    onSelect: function(suggestions,data){ $(".btn1").attr("href", "${pageContext.request.contextPath}/actions/espaceClients?participantId=" + data) }
                });

类似

                var search = false;
            $('#query1, #query2, #query3').keyup(function(){
                if (!search){
                    search = true;
                }
                if (search) {
                    search = false;
                    autocompleteThem();
                }
            });

你可以看到,上面的代码是愚蠢的,但它有点显示我正在尝试做的事情。

简单来说,如果用户在某段时间内没有输入任何其他内容,那么您可以调用自动完成功能。

我希望我很清楚,因为我的大脑一团糟......

2 个答案:

答案 0 :(得分:4)

在该插件上使用deferRequestBy option,如下所示:

$('#query1').autocomplete({
                serviceUrl:'/actions/autocomplete?population=salon',
                minChars:3, 
                maxHeight:300,
                width:200,
                clearCache:true,
                deferRequestBy: 200, //200ms
                onSelect: function(suggestions,data){ $(".btn1").attr("href", "${pageContext.request.contextPath}/actions/espaceClients?participantId=" + data) }
            });

答案 1 :(得分:3)

你真的想要防止多个同时的请求吗?这将抑制此插件的有用性。您可以为请求添加延迟,也可以使用AjaxQueue等插件来确保结果以正确的顺序返回浏览器。

使用内置delay参数(来自手册):

  

以毫秒为单位的延迟   按键后自动完成等待   激活自己。零延迟使   对本地数据的感觉(更多   响应),但可以产生很多   加载远程数据,同时减少   响应。

使用指定的延迟选项初始化自动完成。

$( ".selector" ).autocomplete({ delay: 0 });

在init之后获取或设置延迟选项。

//getter
var delay = $( ".selector" ).autocomplete( "option", "delay" );
//setter
$( ".selector" ).autocomplete( "option", "delay", 0 );

autocomplete plugin you're using的延迟参数等效于

deferRequestBy