停止阿贾克斯如果?(使用多个值自动完成)



所以,我正在使用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?

我觉得我将不得不为此重新考虑整个事情。难道没有快速解决方案吗? 我有点迷茫和疲惫。

有什么帮助吗?

我建议您disableAjax 启动的元素,并在完成后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);

最新更新