变量 ajaxdata 在成功函数中被修改,如果还没有完成,我想等待 2 秒,然后继续没有它。
该用例用于 jqueryui 自动完成字段。自动完成源是一个 ajax 请求,但如果用户快速键入并在列表加载之前退出该字段,则该字段保持未设置。使用自动完成上的“更改”事件,我检查用户是否在未选择的情况下输入了有效选项,但如果在更改事件触发时未加载源,这将不起作用。因此,如果源(存储在变量“ajaxdata”中)为空,我想延迟等待的更改函数。
代码:
input.autocomplete({
source: function (request, response){
$.ajax(
{
type: "GET",
url: "/some/url",
dataType: "json",
success: function(data){
response($.map(data,function(item){
return{
label: item.label,
value: item.value
}
}));
ajaxdata = data;
}
}
);
// ajaxopts = ajaxsource(request,response,ajaxurl,xtraqry)
},
change: function(event, ui) {
if (!ui.item) {
// user didn't select an option, but what they typed may still match
var enteredString = $(this).val();
var stringMatch = false;
if (ajaxdata.length==0){
/// THIS IS WHERE I NEED A 2 SECOND DELAY
}
var opts = ajaxdata;
for (var i=0; i < opts.length; i++){
if(opts[i].label.toLowerCase() == enteredString.toLowerCase()){
$(this).val(opts[i].label);// corrects any incorrect case
stringMatch = true;
break;
}
}
}
},
});
编辑:
更具体地说明问题:这种延迟需要是有条件的。这意味着如果数据已经加载(因为它来自静态源,或者来自更早的 ajax 调用)我不想有延迟。