清除选择更改()的超时
clear timeout on select change()
我需要使用 AJAX 每 5 秒从数据库中获取和显示一次数据,为此我使用递归setTimeout
,类似于下面的代码
var timerId = setTimeout(function tick() {
alert( "tick" );
timerId = setTimeout(tick, 2000);
}, 2000);
此外,我的页面上有 3 个过滤器(select
元素),#books-filter, #authors-filter, #stores-filter
每次我在选择列表中选择某个选项或更改我的选择时,我都需要清除超时并用新的 5 秒再次设置它,并在 5 秒后获取新数据。
我在下面的代码
$(document).ready(function() {
"use strict"
var $body = $('body');
function filterBooks() {
var start = null,
interval = 2000;
function select() {
$("#books-filter, #authors-filter, #stores-filter").change(function() {
clearTimeout(start);
timer();
});
}
select();
function timer() {
start = setTimeout(function tick() {
start = setTimeout(tick, interval);
filter();
}, interval);
}
timer();
function filter() {
var $form = $('#filter');
var url = $form.attr('action');
var data = $form.serialize();
if(data !== '') {
$.ajax({
type: 'post',
url: url,
data: data,
dataType: 'json',
error: function(response){
},
success: function(response) {
//console.log(response);
}
});
}
}
}
filterBooks();
});
但我不确定,clearTimeout
会这样工作吗?
看,如果您希望某个函数以一定的时间间隔多次执行,您将从该方法中受益更多setInterval()
:
function retrieveMyData() {
// your ajax stuff
}
var myInterval = setInterval(retrieveMyData, 5000);
然后,当更改事件在select
元素上触发时,只需重新启动间隔即可
$(document).on('change', '#your-target-select', function () {
clearInterval(myInterval);
myInterval = setInterval(retrieveMyData, 5000);
});
正如 markoffden 所说,您可以考虑改用间隔,因为它是实现周期循环的直接函数。但要回答你的问题: 只要您可以检索相应超时的 ID,clearTimeout
就可以在侦听器中使用。下面是一个全局存储当前超时的示例,其中包含一个标志和用于在超时循环之间切换的按钮:http://codepen.io/clemeno/pen/aNmzdm
相关文章:
- 下拉选择可自动更改第二个下拉选择
- 如何使用jQuery选择下拉列表的值
- jquery点击函数select&取消选择
- Windows8应用程序(html&Javascript):从图片库(除了文件选择器)显示图像的另一种方式
- 按照选项卡索引的顺序循环一个jQuery选择
- 在动态创建的元素上获取对特定选择器的引用
- AngularJS-在JSON选择器中使用变量名
- 每当您在选择器内移动鼠标时,悬停功能就会重复
- 获取选择框的状态
- d3基于用户选择动态更新节点
- 提交后保留下拉选择的值
- JQuery对动态创建的对象进行选择
- 无法在Ionic select中预先选择最后一个选项
- 使用CSS或js,使用动态选择器选择任意li的下一个元素
- jQuery自动完成阻止选择后聚焦
- 使用此选项选择父类内部的类
- jQuery最近父级的数据属性选择器
- 遍历类元素数组,并在jquery中选择同级元素
- casperJS CSS 选择器:waitFor 函数总是超时
- 清除选择更改()的超时