向$ .post jquery请求添加延迟

时间:2011-03-04 14:26:32

标签: jquery post delay

我正在对表单中的任何复选框更改发送jquery $ .post请求。 我想要的是将$ .post延迟500毫秒,以防用户快速检查多个复选框,以避免多个无用的请求。

这是我的代码,我添加了一个setTimeout函数,似乎可以处理除$ .post函数之外的所有内容......

var delay = (function(){
  var timer = 0;
  return function(callback, ms){
    clearTimeout (timer);
    timer = setTimeout(callback, ms);
  };
})();

$(document).ready(function() {  

    $('.checkbox').change(function() {

        delay(function(){                             
            $.post("/?page_id=4", $("#selectors").serialize(), function(data){
                $('#results').html(data);
            }); 
        });

    }, 1000 );

});

知道为什么这不起作用?

2 个答案:

答案 0 :(得分:12)

Live example

这样:

$('.checkbox').change(function() {

    delay(function(){                             
        $.post("/?page_id=4", $("#selectors").serialize(), function(data){
            $('#results').html(data);
        }); 
    });

}, 1000 );

应该是:

    $('.checkbox').change(function() {

        delay(function(){    
            alert('post');            
            $.post("/?page_id=4", $("#selectors").serialize(), function(data){
                $('#results').html(data);
            }); 
        }, 1000);

    });

答案 1 :(得分:5)

jQuery已经有一个延迟函数:

$(window).delay(500).queue(function() {
  $.post({});
});