我有一个函数,它返回在敲击时在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(); }
);
}
});
});
Run Code Online (Sandbox Code Playgroud)
谢谢 ;)
我倾向于在该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(); }
);
}
}
Run Code Online (Sandbox Code Playgroud)
这会将您的搜索分成另一个功能,我们只是在敲击一个键并触发该搜索功能之间延迟500毫秒.如果你键入另一个字母,500ms计时器会重置clearInterval(),所以快速键入不会触发20个事件,只有一旦你暂停半秒钟就会触发它.该$.proxy()部分是执行this时正确的setTimeout().
| 归档时间: |
|
| 查看次数: |
1113 次 |
| 最近记录: |