[JAVA] So verhindern Sie die doppelte Verarbeitung durch addEventListener

Betriebsumgebung Ruby 2.6.5 Rails 6.0.3.2

Zuvor wurde derselbe Prozess viele Male von addEventListener generiert, was einen Fehler verursachte und manchmal konnte ich nicht tun, was ich wollte, also habe ich ihn gepostet.

Ein Beispiel, bei dem aufgrund von addEventListener eine doppelte Verarbeitung erfolgt

Ruby:index.html.erb


<% @hugas.each do |huga| %>
  <div class="huga" >    
    <%= huga.content %>
  </div>
<% end %>

Der obige Code zeigt, dass die Inhaltsspalte von huga wiederholt angezeigt wird und die Klasse des angezeigten Inhalts huga ist.

huga.js


function hoge() {
  const hugas = document.querySelectorAll(".huga");
  hugas.forEach(function (huga) {
    huga.addEventListener("click", () => {
    //Verarbeitung, die durch Klicken erfolgt
    });
  });
};
setInterval(hoge, 1000);

Mit der Funktion hoge () als erster Zeile erklären wir diesen Code aus der zweiten Zeile. In der zweiten Zeile werden alle Elemente, deren Klasse Huga ist, Hugas zugewiesen. In der dritten Zeile wird Hugas nacheinander unterteilt, und ihre Namen sind huga. Wenn Sie in der 4. Zeile auf huga klicken, erfolgt die Verarbeitung in der 5. Zeile. Die letzte Zeile bewirkt jede Sekunde die obige Operation.

Mit anderen Worten, die beiden oben genannten Codes zeigen, dass beim Klicken auf den Inhalt der in der 5. Zeile von huga.js geschriebene Prozess ausgeführt wird.

Wenn jedoch nichts unternommen wird, tritt ein Fehler auf. Dies liegt daran, dass die letzte Zeile von huga.js das Verhalten der 2. und 3. Zeile jede Sekunde verursacht. Wenn Sie beispielsweise 10 Sekunden nach dem Übergang zu dieser Seite auf Inhalt klicken, wird die Verarbeitung der 5. Zeile zehnmal gleichzeitig ausgeführt.

Um dieses Problem zu lösen, ist der Titel dieses Artikels "So verhindern Sie die doppelte Verarbeitung durch addEventListener" erforderlich.

So verhindern Sie die doppelte Verarbeitung durch addEventListener

huga.js


function hoge() {
  const hugas = document.querySelectorAll(".huga");
  hugas.forEach(function (huga) {
    if (huga.getAttribute("baz") != null) {
      return null;
    }
    huga.setAttribute("baz", "true");
    huga.addEventListener("click", () => {
    //Verarbeitung, die durch Klicken erfolgt
    });
  });
};
setInterval(hoge, 1000);

Eine doppelte Verarbeitung kann verhindert werden, indem die 4. bis 7. Zeile des obigen Codes hinzugefügt werden. Dies liegt daran, dass dieser Zusatz bedeutet, dass unabhängig davon, wie viele Sekunden vor dem Klicken auf den Inhalt vergangen sind, eine Huga nur einmal verarbeitet wird.

Ich werde den hinzugefügten Teil im Detail erklären. Zuerst wird nach 1 Sekunde der erste Prozess ausgeführt, und die if-Anweisung verursacht eine bedingte Verzweigung. Da huga kein Attribut namens baz hat, wird es null und der bedingte Ausdruck ist falsch. Da die Verarbeitung im Fall von false jedoch nicht beschrieben wird, geht es so wie es ist zur nächsten Verarbeitung über. Zeile 7 gibt huga das Attribut baz, was wahr ist. Mit anderen Worten, ** Der erste Prozess ist der gleiche wie zuvor beschrieben. ** **.

Schauen wir uns den Fall an, wenn 2 Sekunden vergangen sind. Nach 2 Sekunden wird der zweite Prozess ausgeführt, und die if-Anweisung verursacht erneut eine bedingte Verzweigung. Im Gegensatz zum ersten Mal hat huga ein Attribut namens baz, also ist es nicht null. Daher wird der bedingte Ausdruck wahr, verarbeitet, wenn wahr ausgeführt wird, und gibt return null aus. Da return null bedeutet, den Prozess zu beenden, wird der Prozess nach dieser Beschreibung nicht ausgeführt. Mit anderen Worten, selbst wenn Sie nach Ablauf von 2 Sekunden auf Inhalt klicken, wird die ** Verarbeitung nur einmal ausgeführt. ** **. Natürlich ist es nach 3 Sekunden dasselbe, so dass Sie eine doppelte Verarbeitung verhindern können.

Recommended Posts

So verhindern Sie die doppelte Verarbeitung durch addEventListener
[Schienen] So verhindern Sie den Bildschirmübergang
[Verarbeitung × Java] Verwendung von Variablen
[Verarbeitung × Java] Verwendung von Arrays
[Verarbeitung × Java] Verwendung der Schleife
[Verarbeitung × Java] Verwendung der Klasse
[Verarbeitung × Java] Verwendung der Funktion
So implementieren Sie die asynchrone Verarbeitung in Outsystems
[Rails] So bestimmen Sie das Ziel anhand von "Rails-Routen"
So geben Sie die von Rails erstellte CSV in S3 aus
So machen Sie doppelte Prüflogik lesbarer
So trennen Sie .scss nach Controller in Rails
Verwendung der Scope- und Pass-Verarbeitung (Servist)
Verwendung von Wissen zur Reduzierung der Supportarbeit um 10 bis 20%
[Java] So erhalten Sie den Schlüssel und den Wert, die in Map gespeichert sind, durch iterative Verarbeitung
So kehren Sie durch Wischen zum vorherigen Bildschirm zurück
So wechseln Sie zum Detailbildschirm, indem Sie auf das Bild klicken
[Java] So erhalten Sie eine Anfrage per HTTP-Kommunikation
So überprüfen Sie standardmäßig nur eine RadioButton-Prüfung (Hinweis)
So starten Sie TOMCAT durch Angabe von JAVA_HOME unter Windows
[Java] So schneiden Sie eine Zeichenfolge zeichenweise aus
[swift5] So führen Sie die Verarbeitung aus, wenn Sie auf die TabBar tippen
So verhindern Sie, dass editTextPreference von android PreferenceFragmentCompat beschädigt wird
Booten nach Umgebung mit Spring Boot of Maven
[RSpec] Testen von Fehlermeldungen, die unabhängig von Shoulda-Matchers festgelegt wurden
So entwickeln Sie OpenSPIFe
So rufen Sie AmazonSQSAsync auf
Verwendung von Map
Wie schreibe ich Rails
Wie benutzt man rbenv?
Verwendung mit_option
Verwendung von fields_for
Verwendung von java.util.logging
Verwendung der Karte
Verwendung von collection_select
Wie benutzt man Twitter4J
Wie benutzt man active_hash! !!
So installieren Sie Docker
Verwendung von MapStruct
Verwendung von TreeSet
So deinstallieren Sie Rails
So installieren Sie Docker-Maschine
[Verwendung des Etiketts]
Wie man ein schattiertes Glas macht
Wie schreibe ich Docker-Compose
Wie man Identität benutzt
Wie man Hash benutzt
Wie schreibe ich Mockito
So erstellen Sie Docker-Compose