所以,我正在使用jQuery处理一个非常简单的自动完成脚本,其中包含多个值(用逗号分隔(。 如果最后一个标记长度> 1,则建议开始,否则不应触发并删除任何建议。
这是代码:
function show_tags () {
var tags = jQuery( this ).val();
var last_tag= getLast(tags);
if (last_tag.length>1) {
jQuery.ajax({
url: ajaxurl,
type: "POST",
data: {
'action': 'suggest_tags',
't': tags
}
}).done(function(response) {
jQuery('.suggestions').html(response);
});
}
else {
jQuery('.suggestions').html('');
}
}
jQuery( ".search-field" ).on( "keyup", show_tags);
但。。。
我发现这可能不是最好的方法,因为如果有人打字太快,else 部分将在之前的 ajax 请求完成之前触发。
如果用户在之后快速键入昏迷,我如何中止以前的请求,因此,如果长度<=1 last_tag?
我觉得我将不得不为此重新考虑整个事情。难道没有快速解决方案吗? 我有点迷茫和疲惫。
有什么帮助吗?
我建议您disable
Ajax 启动的元素,并在完成后enable
它,使用.prop()
,另一种方法是确保限制/反抖 Ajax 调用(不确定该插件是否适用于 jQuery 3(:
function show_tags () {
var textInput = jQuery( this );
var tags = jQuery( this ).val();
var last_tag= getLast(tags);
if (last_tag.length>1) {
textInput.prop( "disabled", true );
jQuery.ajax({
url: ajaxurl,
type: "POST",
data: {
'action': 'suggest_tags',
't': tags
}
}).done(function(response) {
jQuery('.suggestions').html(response);
textInput.prop( "disabled", false );
});
}
else {
jQuery('.suggestions').html('');
}
}
jQuery( ".search-field" ).on( "keyup", show_tags);