2016-02-18 163 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"); 

希望這有助於!