Jquery发帖两次?

时间:2014-04-30 07:02:55

标签: javascript php jquery

我在PHP中有一个函数advSearch。当有人滚动到页面底部时,我必须调用该函数。但是当我滚动到页面底部时,advSearch()会自动调用两次。

$(document).ready(function() {
 var txt = 1;
 $(window).scroll(function() {
  if ($(window).scrollTop() >= ($(document).height() - $(window).height())) {
    $('#loadmore_tab01').css('display','block');
    setTimeout(function(){
      $.post("advSearch",{txt:txt},function(result){
        if (result) {
          $('#loadmore_tab01').css('display','none');
          if (result != 0) {
            var count = JSON.parse(result).length;
            var oldcount = $('#tabs01').attr('data-count');
            var newcount = parseInt(oldcount)+count;
            $('#tabs01').children('.clear').remove();
            generateHTML_vertical(JSON.parse(result),parseInt(oldcount));
            $('#tabs01').attr('data-count',newcount);
          }
        }
      });
    },9000);
  }
 });
});

2 个答案:

答案 0 :(得分:0)

SetTimeout不会做我认为你在这里尝试的事情 - 它只会延迟运行它 - 所以当多次调用时,它会等待并多次调用。

要限制或去抖动,您可以尝试http://underscorejs.org/

中的_.throttle_.debounce功能

答案 1 :(得分:0)

使用标志变量之类的

var executed = false;
   var txt = 1;
   $(window).scroll(function() {
    ($(window).scrollTop() >= ($(document).height() - $(window).height())) {
    $('#loadmore_tab01').css('display','block');
    setTimeout(function(){
    if(!executed){
      $.post("advSearch",{txt:txt},function(result){
        executed = true;
        if (result) {
          $('#loadmore_tab01').css('display','none');
          if (result != 0) {
            var count = JSON.parse(result).length;
            var oldcount = $('#tabs01').attr('data-count');
            var newcount = parseInt(oldcount)+count;
            $('#tabs01').children('.clear').remove();
            generateHTML_vertical(JSON.parse(result),parseInt(oldcount));
            $('#tabs01').attr('data-count',newcount);
          }
        }
      });
     }
    },9000);
  }
 });

var executed = false; var txt = 1; $(window).scroll(function() { ($(window).scrollTop() >= ($(document).height() - $(window).height())) { $('#loadmore_tab01').css('display','block'); setTimeout(function(){ if(!executed){ $.post("advSearch",{txt:txt},function(result){ executed = true; if (result) { $('#loadmore_tab01').css('display','none'); if (result != 0) { var count = JSON.parse(result).length; var oldcount = $('#tabs01').attr('data-count'); var newcount = parseInt(oldcount)+count; $('#tabs01').children('.clear').remove(); generateHTML_vertical(JSON.parse(result),parseInt(oldcount)); $('#tabs01').attr('data-count',newcount); } } }); } },9000); } });