停止要执行两次的Jquery函数

停止要执行两次的Jquery函数,jquery,Jquery,我有一个图像脚本,就像facebook显示图像的方式一样。我想在将来添加更多的评论,但我不知道怎么做。加载更多注释的函数执行两次。我编写了这个简单的代码来描述我的问题。是否有方法停止函数的执行 $(document.body).on('click', '.u_img' ,function(e){ e.preventDefault(); var img_id = $(this).attr('data-imgid'); $('#overlay').css('display',

我有一个图像脚本,就像facebook显示图像的方式一样。我想在将来添加更多的评论,但我不知道怎么做。加载更多注释的函数执行两次。我编写了这个简单的代码来描述我的问题。是否有方法停止函数的执行

$(document.body).on('click', '.u_img' ,function(e){
    e.preventDefault();
    var img_id = $(this).attr('data-imgid');
    $('#overlay').css('display','block'); 
    $.ajax({
        url: base_url+"home/get_info_and_comments",
        async: false,
        type: "POST",
        data: "img_id="+img_id,
        dataType: "html",
        success: function(data) {
            $("#overlay_info").html(data);
            load_more(image_id);
            $("#cntrlnxpr a").on('click', function (d) {
                 d.preventDefault();
                 var img_id2 = $(this).data("imgid");
                 $.ajax({
                    url: base_url+"home/get_comments",
                    async: false,
                    type: "POST",
                    data: "img_id="+img_id2,
                    dataType: "json",
                    success: function(data2) {          
                        $("#sldhlper").load(base_url+"home/get_more_comments/"+data2['id']);
                        load_more(data2['id']);
                    }
                });
            });
        }        
    });
});

function scroll_func (my_var) {
    $('.container').scroll(function() {
        var erthis = $(this);
        var height = erthis.height();
        var all = erthis[0].scrollHeight;
        var top = erthis.scrollTop();
        if (top == all - height) 
        {
            // load more data
        }
    });
}

您应该尝试将代码拆分为函数,这样会更容易理解

要回答您的问题,您有两个选项:

1-使用布尔变量确定函数是否应执行

var eventOneExecute = true;
var eventTwoExecute = false;

And then, in the first event, you swap those values.
// $(...).on('click', function() {
    if (eventOneExecute) {
        eventOneExecute = false;
        eventTwoExecute = true;
        // Do stuff
    }
}
2-这是最好的做法,一旦你不想再执行事件,你就解除它的绑定。


希望这有帮助

为什么要将事件处理程序绑定到函数中?@Satpal没有编写两次代码,而是将其放入函数中抱歉,我没有收到您的建议question@phenxd请参阅我上面提供的链接中的JSFIDLE。并查看控制台日志。因此,在您滚动到底部后,将执行一个正常的函数。当您单击Loadmoredata并滚动到底部时,您会注意到该函数在控制台日志中执行了两次,但我需要一种忽略第一个事件处理程序的方法,因为我通过ajax获取新数据
$( "....").unbind( "click" );