停止Jquery函数执行两次

时间:2016-02-18 17:49:27

标签: jquery

我有像facebook显示图像一样的图像脚本。而且我想在未来添加更多评论,但我不知道该怎么做。加载更多注释的函数执行两次。我制作了这个描述我问题的简单代码。 my simple code。有没有办法阻止函数执行。

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

答案 0 :(得分:0)

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

要回答您的问题,您有两种选择:

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-哪种方法是最佳做法,一旦你不想再执行一个事件,你就解开它。

unbind

$( "....").unbind( "click" );

希望这有帮助!