2013-04-22 77 views
5

我看了一遍stackoverflow和其他網站,但找不到我正在尋找的答案。單擊按鈕只有一次(js)

我有一個排序按鈕,我希望用戶只能點擊一次。這是我的JavaScript/jQuery觸發點擊事件。但是我怎麼強制它只能被點擊一次?

$(document).ready(function() { 
    //var $new_total = $('#gtotal').val(); 

    $('#a_is_valid').click(function() { 
     if ($('#code_promo').val() == 'theCode') { 
      $('#gtotal').val($('#gtotal').val() - ($('#gtotal').val() - (($('#gtotal').val() * .75)))); 
     } 
    }) 
}) 
+0

沒有這些答案可以幫助你? – PSL 2013-04-22 20:42:04

回答

6

使用jQuery的.one()功能。

$('#a_is_valid').one('click', function(){ 
    if ($('#code_promo').val() == 'theCode') 
    {$('#gtotal').val($('#gtotal').val()-($('#gtotal').val()-(($('#gtotal').val()*.75)))); 
} 
5

您可以使用jQuery .one()這將確保點擊事件只發生一次。

Demo

$('#a_is_valid').one('click', function(){ 

     if ($('#code_promo').val() == 'theCode') 
     { 
      var gtot = $('#gtotal').val(); 
      $('#gtotal').val(gtot -(gtot -(gtot *.75))); 
     } 
}); 

另一種方法是使用on()off()

$('#a_is_valid').on('click', handleClick); 

function handleClick() { 
    var gtot = $('#gtotal').val(); 
    $(this).off('click'); 
    if ($('#code_promo').val() == 'theCode') { 
     $('#gtotal').val(gtot - (gtot-(gtot * 0.75))); 
    } 
} 
+2

是'this'的一個jQuery對象嗎? – 2013-04-22 20:15:03

+0

@KevinB感謝您指出。 :) – PSL 2013-04-22 20:15:53

+1

編輯只是爲了建議如何編寫可讀代碼 – 2013-04-22 20:22:35

2

爲什麼不使用.one()代替.click()

+0

我以爲我回答了。奇怪:/是的,回答所有人的問題,是的,他們幫助:D謝謝! 對不起,我現在不能發佈更多。我真誠地感謝你的所有時間,夥計們。真正做到。我希望我能說更多,但我必須走。 – 2013-05-07 20:26:34

0

使用現代JS!

const button = document.getElementById("a_is_valid"); 
button.addEventListener("click", function() { 
    // Add one-time callback 
}, {once : true}); 

你也可以只禁用按鈕:

button.disabled = true; 

DocumentationCanIUse