1

因此,每次用户滚动页面以加载更多帖子时都会触发。

它用

$("#next-paginav")[0].click(); 

因为它是一个锚点,它正在“点击”。

$(document).ready(function() {
    $(document).scroll(function (e) { 

        var intBottomMargin = 300; 


        if ($(window).scrollTop() >= $('main-content').height() - $(window).height() - intBottomMargin) {


             setTimeout(function(){ $("#next-paginav")[0].click(); }, 800);
        }

    });
});

Dipesh 的代码,我无法开始工作。

$(document).ready(function() {
    $(document).scroll(function (e) { 

        var intBottomMargin = 300; 


        if ($(window).scrollTop() >= $('main-content').height() - $(window).height() - intBottomMargin) {


             setTimeout(function(){ 
             $("#next-paginav")[0].one('click',function() {  });

              }, 800);


        }

    });
});

问题是它触发得太快了,甚至在帖子加载之前触发了两三四次。这会导致各种问题,除了它会在实时服务器上发出如此多的请求之外,有时它会跳过过帖子。有没有办法只触发一次?

4

4 回答 4

1

您可以使用.one()jQuery 处理程序..

描述:将处理程序附加到元素的事件。每个元素最多执行一次处理程序。

Official Document

例子

$("#next-paginav")[0].one('click',function() {  });

您也可以使用.off()处理程序。

例子

$("#next-paginav")[0].click(function(){
  $(this).off(event);
});
于 2013-04-01T05:18:42.777 回答
1
$(document).ready(function() {
    var timeout = '';
    $(window).scroll(function (e) { 
        var intBottomMargin = 300; 
        clearTimeout(timeout);
        if ($(window).scrollTop() >= $('main-content').height() - $(window).height() - intBottomMargin) {
          timeout = setTimeout(function(){ 
                $("#next-paginav")[0].click(); 
          }, 800);
        }
    });
});
于 2013-04-01T06:21:41.457 回答
0

试试这个

    $("#next-paginav")[0].one('click',function (e) { 

或者你可以试试“live”

    $("#next-paginav")[0].live('click',function (e) { 

从jquer1.7开始,不推荐使用“live”方法,您可以使用“on”方法,例如

    $("#next-paginav")[0].on('click',function (e) { 
于 2013-04-01T05:18:00.110 回答
0

我的假设是,如果已经有计划加载,那么您不想再次触发加载。

您可以使用基于标志的解决方案

$(document).ready(function() {

    var intBottomMargin = 300;

    $(document).scroll(function(e) {
        if (clickFlag) {
            return;
        }

        clickFlag = true;

        if ($(window).scrollTop() >= $('main-content').height()
                - $(window).height() - intBottomMargin) {

            setTimeout(function() {
                        $("#next-paginav")[0].click();
                    }, 800);
        }

    });
});

var clickFlag = false;
function myClickHandler() {
    $.ajax({}).always(function() {
                clickFlag = false;
            })
}
于 2013-04-01T05:21:05.677 回答