选择更改时清除超时()

时间:2016-03-12 11:52:34

标签: javascript jquery

我需要使用AJAX每隔5秒钟从数据库中获取并显示数据,为此我使用递归void f(int& x) { cout << x; } void main() { int a = 2; f(a); // This is fine int const b = 2; f(b); // Error: 'void f(int &)' : cannot convert argument 1 from 'const int' to 'int &' } ,类似下面的代码

setTimeout

我的页面var timerId = setTimeout(function tick() { alert( "tick" ); timerId = setTimeout(tick, 2000); }, 2000); 上还有3个过滤器(select元素),每当我在选择列表中选择某个选项或更改我的选择时,我需要清除超时并再次使用新设置5秒,并在5秒后获得新数据。

我的代码

#books-filter, #authors-filter, #stores-filter

但我不确定,$(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(); }); 会以这种方式工作吗?

2 个答案:

答案 0 :(得分:1)

看,如果你想在某个时间间隔内多次执行某些功能,你将从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);
});

答案 1 :(得分:1)

正如markoffden所说,您可以考虑使用间隔,因为它是实现周期性循环的直接函数。 但要回答你的问题: 只要您可以检索相应的超时ID,clearTimeout将在侦听器中工作。 下面是一个全局存储当前超时的示例,其中包含一个标志和按钮,用于在超时循环之间切换: http://codepen.io/clemeno/pen/aNmzdm