如何在jQuery keyup上实现延迟?
How do I implement a delay on jQuery keyup?
我正在制作一个列表过滤器,并希望在用户是快速打字的情况下延迟。查看类似问题的不同解决方案对我没有帮助,我不理解它们实现的逻辑。
这是我当前的代码:
$.fn.filterList = function(){
var inputFilter = $(this);
var list = $('#' + inputFilter.data('list'));
var listItems = list.children('li');
inputFilter.keyup(function(){
setTimeout(function () {
var term = inputFilter.val().toLowerCase();
listItems.each(function(i, e){
var city = ($(e).text()).toLowerCase();
if(city.startsWith(term)){
console.log(city);
}
});
}, 800);
});
};
$('.my-input').filterList();
这样做的问题是,无论用户键入多快,它都会在每次键上触发。
如何实现延迟,使其不会触发每个keyup
?
在每个连续的keypress
上,您需要清除之前的计时器,以便该函数在输入结束后仅触发X毫秒。试试这个:
var timer;
inputFilter.keyup(function() {
clearTimeout(timer);
timer = setTimeout(function() {
var term = inputFilter.val().toLowerCase();
listItems.each(function(i, e) {
var city = $(e).text().toLowerCase();
if (city.startsWith(term)) {
console.log(city);
}
});
}, 800);
});
下面是一个简化的工作示例:
var timer;
$('#foo').keypress(function() {
clearTimeout(timer);
timer = setTimeout(function() {
$('div').fadeIn('fast').delay(1000).fadeOut('fast');
}, 800);
});
div { display: none; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input id="foo" />
<div>You stopped typing 1 second ago</div>
var delay = (function(){
var timer = 0;
return function(callback, ms){
clearTimeout (timer);
timer = setTimeout(callback, ms);
};
})();
inputFilter.keyup(function() {
delay(function(){
var term = inputFilter.val().toLowerCase();
listItems.each(function(i, e){
var city = ($(e).text()).toLowerCase();
if(city.startsWith(term)){
console.log(city);
}
});
}, 800 );
});
尝试以下代码:
Html:<input type="text" id="inputtext" />
Jquery代码:<script type="text/javascript">
$(document).ready(function () {
$('#inputtext').keyup(function () {
setTimeout(function () {
alert("Hi");
}, 5000);
});
});
</script>
在每个按键计数点击后,其中一些触发功能。
建议:使用
.on('keyup', function(){}).
相关文章:
- 如何使用动画实现纸张推车
- 客户端服务器REST API captcha实现
- 可以简化嵌套的延迟Q Promises解析吗
- 如何实现此布局
- 实现延迟的jquery更改事件处理程序
- 如何在水平滚动 Jquery 上实现延迟加载
- 如何在文本上实现延迟加载
- 实现延迟在滚动上加载未知大小的图像并最佳定位的图像库
- 如何使用 RequireJS 实现延迟加载
- 如何使用ReactJS实现延迟加载功能(append child不适用于React)
- 我可以用jqGrid实现延迟加载吗
- 在延迟/承诺实现中使用计时器是一种罪恶
- 承诺/延迟库是如何实现的
- 延迟/承诺混淆和实现
- Angular延迟实现只输出循环的最后一个值
- 如何在jQuery keyup上实现延迟?
- 下划线_延迟实现
- 如何实现容器类的延迟加载
- 使用AngularJS实现对$http请求的延迟($timeout)
- 如何使用jQuery.延迟使用可选的new关键字实现