【发布时间】:2011-12-06 14:35:10
【问题描述】:
我正在使用一个 JQuery UI 自动完成字段,该字段与有时可能相当慢的 ajax 查找相关联。有时,用户会在 之后 ajax 查询启动但 在 ajax 调用返回之前离开文本输入字段。发生这种情况时,即使文本输入不再具有焦点,也会出现自动完成弹出窗口,并且关闭弹出窗口的唯一方法是选择一个项目(而不是跳到另一个字段)。
事实上,这个jquery ui demo 表现出相同的行为(例如,在文本字段中输入“ariz”,等待“搜索”动画出现,然后在返回任何结果之前跳出该字段)。
一个可行的解决方案(但感觉像一个黑客)是检查 ajax 的成功回调以查看文本字段是否仍然具有焦点,如果没有,则使用空列表调用 response(),例如:
$( "#city" ).autocomplete({
var elem = this.element;
source: function( request, response ) {
$.ajax({
url: "http://ws.geonames.org/searchJSON",
data: {name_startsWith: request.term},
success: function( data ) {
if(!$(elem).is(':focus') {
response({});
return;
}
response( $.map( data.geonames, function( item ) {
return {
label: item.name + (item.adminName1 ? ", " + item.adminName1 : "") + ", " + item.countryName,
value: item.name
}
}));
}
});
}
});
有没有更优雅的解决方案?理想情况下,我想在用户离开文本输入字段时立即取消 ajax 请求。
【问题讨论】:
标签: ajax jquery-ui jquery autocomplete