2016-02-18 31 views
-1

我有一个像facebook显示图像一样的图像脚本。我正在努力为它增加更多评论,但我不知道该怎么做。加载更多注释的函数执行两次。我做了这个简单的代码来描述我的问题。 my simple code。有没有办法阻止函数执行。停止jquery函数执行两次

$(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 
     } 
    }); 
} 
+0

为什么你在函数内部绑定事件处理程序? – Satpal

+0

@Satpal而不是写代码两次我把它放在一个函数 – ler

+0

对不起,但我没有得到你的问题 – phenxd

回答

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"); 

希望这有助于!