这是我的问题:使用自动完成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();
}
});
你可以看到,上面的代码是愚蠢的,但它有点显示我正在尝试做的事情。
简单来说,如果用户在某段时间内没有输入任何其他内容,那么您可以调用自动完成功能。
我希望我很清楚,因为我的大脑一团糟......
答案 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