消防jquery事件一次

时间:2013-04-01 05:16:05

标签: jquery

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

使用

$("#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 个答案:

答案 0 :(得分:1)

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

  

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

<强> Official Document

示例

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

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

示例

$("#next-paginav")[0].click(function(){
  $(this).off(event);
});

答案 1 :(得分: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);
        }
    });
});

答案 2 :(得分:0)

试试这个

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

或者您可以尝试“直播”

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

根据“live”方法不推荐使用jquer1.7你可以使用“on”方法,如

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

答案 3 :(得分: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;
            })
}