Wie Sie verhindern, dass der Aufruf von de-Ereignisprozedur zweimal auf schnelle Klicks?

Gibt es einen Knopf und wenn der Benutzer klickt auf den button, werden einige Daten gespeichert mit back-end. Problem ist, wenn der Benutzer klickt auf den button sehr schnell, event-handler wird immer ausgeführt, mehrere Male.

Dies ist der code

var x = 1;
$('#button').click(function() {
  //Do something
  //Save some data on network
  x++;
  console.log(x);
});

Ich möchte dieser Prozedur, die ausgeführt werden, wenn der Benutzer klickt auf die Schaltfläche nur einmal. Auch Bei doppelt oder dreifach klicken, dies sollte nur einmal ausgeführt. Ich möchte nur vermeiden, Klicks, diese Prozedur kann ausgeführt werden, wieder natürlich

Habe ich mehrere Lösungen im Kopf wie

  1. Definieren Sie eine Globale variable wie IS_BUTTON_HANDLER_WORKING = false und wenn Sie den hf setzen Sie ihn auf true und am Ende auf false gesetzt wieder. Und prüfen Sie, ob es wahr ist, einfach aus der Funktion zurückzugeben.

  2. Trennen der hf am Anfang und wieder am Ende.

Betrachten Sie 25 Tasten in der Anwendung. Was sollte der beste Ansatz, um dies zu implementieren.

Werfen Sie einen Blick auf diese Fiddle

Lösung

$('#button').click(function() {
   $(this).attr('disabled', true);
  //Do something
  //Save some data on network
  $(this).removeAttr('disabled');
});

Mit dieser, wir sind sicher, dass unsere nächsten handler wird ausgeführt, nur bei der vorherigen Ausführung wurde völlig geschafft.

  • Versuchen Sie es mit one('click', fn) statt click
  • Ich glaube nicht, dass one ist die richtige Antwort, weil der handler nicht ausgeführt werden, wieder. Möchten Sie vielleicht zum senden des Formulars mit aktualisierten Daten wieder nach einiger Zeit.
Schreibe einen Kommentar