2014-10-30 139 views
0

我現在的問題是我有一個需要約600毫秒才能完成的功能。如果用戶垃圾郵件點擊選擇器,它將調用多個呼叫。我曾嘗試通過在調用該函數時禁用單擊事件回調來阻止垃圾郵件點擊,但是,這不起作用。有什麼辦法可以停止鼠標點擊或刪除排隊的回調。Jquery鼠標點擊堆棧

$('.selector').click(function() { 
    $(this).off('click.disabled'); 
    //DO STUFF 
    $(this).on('click.disabled', false); 
}); 

謝謝!

+0

這個函數是什麼樣子的,它是異步的嗎? – adeneo 2014-10-30 12:38:36

+0

JavaScript中的所有內容都不是異步的,因爲它只能在一個線程上運行?道歉,如果我錯了,對JS很新,而且很累^。^ – Gouvi 2014-10-30 12:59:57

+1

在運行時顯示微調或其他東西,可能會阻止用戶點擊垃圾郵件。 – Barmar 2014-10-30 13:09:53

回答

0

可以使用布爾獲得國家:

var clicked = false; 
$('.selector').click(function() { 
    if (!clicked){ 
     clicked = true; 
     ... 
     clicked = false; 
    } 
}); 

,或者使用「一」的方法來連接處理器只有一次

var myFunc = function(){ 
    ... 


    //on finish 
    $('.selector').one("click", myFunc); 
}; 

$('.selector').one("click", myFunc); 
+0

我不認爲這會起作用。事件排隊,所以後續的點擊處理程序不會運行,直到前一個點擊處理程序完成,因此該變量將始終爲'false'。 – Barmar 2014-10-30 12:41:19

+0

「clicked = false」可能在ajax結果方法中,所以async .. – Hacketo 2014-10-30 12:43:39

+0

如果這是發生了什麼,他的原始代碼將起作用。 – Barmar 2014-10-30 12:45:49

0
var clickTime = -1; 

$('.selector').click(function() { 
    if (clickTime == -1) { 
     clickTime = new Date().getTime(); 
    } 
    var end = new Date().getTime(); 
    var time = end - clickTime; 
    if (!$(this).hasClass('selected') && time < 500){ 
     e.addClass("selected"); 
     // Do other stuff 
     clickTime = new Date().getTime(); 
     } 
}); 

我打算用這個了。最有可能需要做更多的事件調查研究,並找出不同的方法來防止這種情況,因爲我不喜歡我的哈克解決方案。

任何反饋將不勝感激無論。