2012-09-07 81 views
0

我有.ajaxComplete綁定到鏈接點擊事件,我需要它只觸發一次。擁有ajaxComplete特定於一個請求

$(document).delegate('.links', 'click', function(evt) { 
    evt.preventDefault(); 
    var origanalUrl = $(this).attr('href'); 
    var hrefRegEx = /^(^\/?{[A-Za-z\_]*\/?)?([A-Za-z\_]+)(\.php)$/ 
    var hashUrl2 = origanalUrl.replace(hrefRegEx, '$2'); 
    var hashUrl = '#' + hashUrl2; 
     var urlExt = ' #ajaxTarget'; 
     var newUrl = origanalUrl + urlExt; 
     if(!$(hashUrl).html() && hashUrl != '#index') { 
      $(hashUrl).load(newUrl).ajaxComplete(function(event, XMLHttpRequest, ajaxOptions) { 
       newMain = $(hashUrl); 
       newHeight = newMain.outerHeight(); 
       alert(newHeight); 
       $('#textBox_main').animate({ 
        height: newHeight 
        }, 500, function() { 
        newMain.fadeIn(500); 
       }); 
       oldMain = newMain; 
      }); 
     } else { 
      isLoaded = true; 
     } 

的第一次點擊是好的,但在接下來的ajaxComplete通話每增加點擊堆。我如何防止這種情況?

回答

0

您將回調附加到元素$(hashUrl)的'ajaxComplete'事件。 (第二次點擊它,另一個處理程序已連接,依此類推)

嘗試將該回調函數傳入負載。像這樣:

$(hashUrl).load(newUrl, function(response, status, xhr) {...}); 
+0

我這樣做了,但回調函數在頁面加載之前觸發。 – jppower175

+1

在這種情況下,嘗試使用您當前的方式,但在調用load之前解除ajaxComplete事件,如下所示:$(hashUrl).unbind('ajaxComplete'); 編輯: 在調用load之前,您應該綁定ajaxComplete事件,以防裝載完成之前綁定ajaxComplete。 – Lian

+0

它做到了,謝謝你! – jppower175

相關問題