jquery
2017-04-04 23 views 1 likes 
1

我已實現了以下的jQuery代碼如何防止按鈕上的點擊事件,如果它已經在處理當前請求

$(".simpleCart_shelfItem button").click(function() { 
      alert(this.value); 
      $(this).addClass('disabled'); 
      $(this).html("Adding &nbsp;&nbsp;<i class='icon-spinner9 spin'></i>"); 
     }); 

的問題與此代碼是,即使它正在處理的代碼,有人再次點擊下面的按鈕它再次開始執行。

如何防止這件事?

+0

你說的「如果它處理的代碼」是什麼意思? 'addClass()'和'html()'方法是同步的...? –

+0

'if(!$(this).hasClass('disabled')){// your code}' – Alex

+0

如果服務器需要10秒來處理該請求,我會得到的迴應是10秒後。現在讓我們假設用戶在2秒前點擊了該按鈕,現在如果用戶在4秒後再次點擊該按鈕,即再次將請求發送到服務器。那麼如何在當前請求被處理之前停止它? –

回答

3

您可以添加一個標誌?

var cartInProcess = false; 
$(".simpleCart_shelfItem button").click(function() { 
    if(cartInProcess == false){ 
     cartInProcess = true; 
     alert(this.value); 
     $(this).addClass('disabled'); 
     $(this).html("Adding &nbsp;&nbsp;<i class='icon-spinner9 spin'></i>"); 
     // do your processing 
     cartInProcess = false; 
    }else{ 
     alert("Please wait until the process finishes."); 
    } 
}); 

也可以使用屬性/數據來檢查它而不是全局變量。

$(".simpleCart_shelfItem button").click(function() { 
    if($(this).data("cartInProcess") == undefined || $(this).data("cartInProcess") == false){ 
     $(this).data("cartInProcess", true); 
     alert(this.value); 
     $(this).addClass('disabled'); 
     $(this).html("Adding &nbsp;&nbsp;<i class='icon-spinner9 spin'></i>"); 
     // do your processing 
     $(this).data("cartInProcess", false); 
    }else{ 
     alert("Please wait until the process finishes."); 
    } 
}); 
3

只需禁用按鈕並在處理後啓用。

$(".simpleCart_shelfItem button").click(function() { 
       $(this).prop('disabled', true); 
       alert(this.value); 
       $(this).addClass('disabled'); 
       $(this).html("Adding &nbsp;&nbsp;<i class='icon-spinner9 spin'></i>"); 
       $(this).prop('disabled', false); 
     }); 
+0

這對我來說非常合適,謝謝@ANS –

4

看到,因爲你添加.disabled類,你可以添加到您的函數的第一行:

if ($(this).hasClass('disabled')) 
    return; 
+0

即使這對我有用@James –

0

而不是添加一個類來禁用外觀,請在點擊時動態禁用按鈕,並在關聯過程完成後啓用它。

$(".simpleCart_shelfItem button").click(function() { 
    $(this).prop('disabled', true); 
    //$(this).prop('disabled', true).addClass('disabled'); //You can also add class if you want a customized look for disabled button. 
    alert(this.value); 
    $(this).html("Adding &nbsp;&nbsp;<i class='icon-spinner9 spin'></i>"); 
    $(this).removeAttr('disabled'); 
    }); 
0

最簡單的方法是使用默認按鈕屬性disabled。您可以禁用該按鈕,直到該過程正在進行。一旦完成,您可以再次啓用該按鈕

禁用按鈕

$(".btn-class").prop('disabled', true); 

啓用按鈕

$(".btn-class").prop('disabled', false); 
+0

您在發佈之前是否檢查了其他答案? –

+0

哎呀,我應該在這之前重新加載瀏覽器:) –

+1

哈哈..發生在我身上的很多次:D –

相關問題