2017-02-06 2 views
2

Ich möchte, dass die Anruffunktion alle 1,5 Sekunden ausgeführt wird. Wenn Sie jedoch kontinuierlich auf eine mobile Maschine klicken Ab dem Zeitpunkt, an dem die Anruffunktion nacheinander aufgerufen wird.Kann JavaScript helfen, doppelte Klickereignisbehandlung zu verhindern?

Dies ist der Code ich verwende:

$('#sendVideo').unbind('click'); 
$('#sendVideo').bind('click', function (event) { 
    $("#sendVideo").prop("disabled", true); 
    call(); 
    setTimeout("$('#sendVideo').prop('disabled', false);", 1500); 
}); 

Gibt es eine Lösung für dieses?

Antwort

3

Sie können einen cleveren Hack verwenden:

var clickInProgress = false; 
$('#sendVideo').bind('click', function (event) { 
    if(clickInProgress) return; 
    clickInProgress = true; 
    $("#sendVideo").prop("disabled", true); 
    call(); 
    setTimeout("$('#sendVideo').prop('disabled', false); clickInProgress=false;", 1500); 
}); 
+0

Es kann eine nette Idee sein, eine deaktivierte Prop zu verwenden als diesen Status –

+0

Der Wert von clickInProgress ändert sich nicht in setTimeout ("$ ('# sendVideo'). Prop ('disabled', false); – jichae

0

Sie eine Flagge auf dem Element während der Erfassungsphase einstellen kann und es während der Blasenphase löschen. Ich bin nicht sicher über jQuery aber in einfachem Java-Script können Sie es wie folgt erreichen:

// set the flag on at capture 
document.querySelector("#sendVideo").addEventListener('click', function(e) { 
    if (this.flagOn) { 
     e.preventDefault(); 
     return false; 
    } 
    this.flagOn = true; 
    return true; 
}, true); 
// delete on bubble 
document.querySelector("#sendVideo").addEventListener('click', function(e) { 
    delete this.flagOn; 
}, false); 

dies, dass ohne Änderung in Ihrem eigenen Code für Sie erledigen soll.

Verwandte Themen