我有一个函数,它在回显时返回AJAX中触发的某些数据量。
但是,只要输入“hello my name is”之类的“long”字符串,每次键入一个键时都会启动一个请求(一次请求10次,获得1个请求响应需要5秒)
如何避免这种情况? (我不想使用.onblur)
$(document).ready(function()
{
$('.search input[type="submit"]').hide();
$('#search_keywords').keyup(function(key)
{
if (this.value.length >= 2 || this.value == '')
{
$('#loader').show();
$('#jobs').load(
$(this).parents('form').attr('action'),
{ query: this.value + '*' },
function() { $('#loader').hide(); }
);
}
});
});
谢谢;)
答案 0 :(得分:5)
我倾向于在keyup
事件上设置一个计时器,如下所示:
$('#search_keywords').keyup(function() {
clearTimeout($.data(this, 'timer'));
$(this).data('timer', setTimeout($.proxy(search, this), 500));
});
function search() {
if (this.value.length >= 2 || this.value == '') {
$('#loader').show();
$('#jobs').load(
$(this).parents('form').attr('action'),
{ query: this.value + '*' },
function() { $('#loader').hide(); }
);
}
}
这会将您的搜索分解为另一个功能,我们只是在敲击一个键并触发该搜索功能之间延迟500毫秒。如果您键入另一个字母,500ms计时器将使用clearInterval()
重置,因此快速键入不会触发20个事件,只有在您暂停半秒后它才会触发。 this
部分是setTimeout()
在{{1}}执行时正确的。