2011-12-06 53 views
0

我的問題是,如果我點擊一個按鈕,並且ajax還沒有返回,我點擊另一個按鈕(或相同的按鈕),然後我最終得到兩個表上屏幕而不是一個。取消當前事件點擊和另一個按鈕時按ajax調用

場景: 我正在構建一個表單並呈現一組基於下拉選項的選項。年份/品牌/型號combo將帶回一系列產品系列 - 地毯/保險槓/地墊/消聲器等。這些產品系列中的每一個都將成爲一個按鈕,並在按下時將帶回該產品系列的產品。

產品然後環繞,並通過JavaScript創建一個表來顯示它們。如果我按下按鈕一次,並等待桌子顯示一切都很好。如果我選擇另一個產品線,產品表將被刪除,然後ajax調用返回新產品,並通過javascript再次將其構建到表中。我得到的問題是,在從第一次點擊構建表之前單擊相同的按鈕或不同的產品線按鈕時,我會顯示兩個表格。

+0

包括你的代碼.... HTML/JS – ManseUK

回答

2

沒有真正理解你的問題,由於是性質模糊我真的只能建議您查看以下 - >的jQuery AJAX Global events

具體的.ajaxStart().ajaxComplete()方法,您可以使用這些禁用按鈕與

$(document).ajaxStart(function(){ 
    $('.buttonsclass').attr('disabled','disabled');; 
}).ajaxComplete(function(){ 
    $('.buttonsclass').removeAttr('disabled'); 
}); 
: - 上 ajaxStart同一類然後 ajaxComplete

實施例重新啓用它們

+0

這是正確的任何機會方法。或者,如果你想要看起來你可以隱藏botton並顯示帶有ajax加載指示器的div。 –

1

您可以abort以前的ajax請求使用abort() xhr對象的方法。試試這個

$(document).ready(
    var xhr = $.ajax({ 
      url: 'url', 
      success: function(data) { 
       //do something 
      } 
     }); 
    }; 

    //If you want to abort this call on some condition just do this 
    xhr.abort(); 
); 
+0

這就像有一個人行橫道按鈕復位定時器爲「光變」每次按下該按鈕... – Sinetheta

0

您可以使用.one()來綁定單個點擊處理程序,然後在您的ajax完成時重新綁定它。比關閉和打開少一點工作。

function clickhandler(){ 
    //your button actions 
} 

//the doc ready bind 
$(yourButton).bind('click',clickhandler); 

$.ajax({ 
    url:'your url', 
    complete : function(){ 
     //rebind it when it's safe to do so again 
     $(yourButton).bind('click',clickhandler); 
    } 
}); 
相關問題