Stimmt es, ein Ereignis in ein Ereignis zu schreiben?

8

Ich habe ein Skript, in dem ich eine Datei XLS hinzufügen werde, sobald ich das Dateiformat validiere, schließe ich das modale eines Bootstrap und öffne ein anderes modal, das ein Bestätigungsfenster ist, um zu sehen, ob der Benutzer sicher hochlädt diese Datei.

Dieses Bestätigungsfenster hat eine Bestätigungsschaltfläche, sobald ich geklickt habe, möchte ich eine Funktion ausführen, die ein AJAX ausführen wird, um die Anfrage an den Server zu stellen.

Aus diesem Grund hatte ich folgende Zweifel:

  • Welche der beiden Möglichkeiten ist besser (und am richtigsten), um den Code auszuführen und warum?
  • Warum wird das click -Ereignis der ersten Eingabedatei ausgeführt, wenn keine Ereignisänderung stattgefunden hat? Ich meine, ich füge eine Datei hinzu, und die Ereignisänderung wird ausgeführt, und ich kann viele Klicks machen, wie ich will. Soll ich nicht eine andere Datei hinzufügen, damit ich die Funktion wieder ausführen kann?
  • Setzen Sie ein Ereignis in ein Ereignis, hat es einen Namen?

%Vor% %Vor%
    
Hoose 02.02.2018, 14:48
quelle

5 Antworten

10
  

Setzen Sie ein Ereignis in ein Ereignis, hat es einen Namen?

Es hat, der Name ist schlechte Idee . Lass mich groß werden. Was passiert, wenn Sie den folgenden Code ausführen.

%Vor%

Ein Klickereignis ist auf der Schaltfläche registriert. Sobald ein Ereignis registriert ist, wird es immer ausgelöst, egal wie oft Sie klicken.

Wenn Sie diesen Code in einen anderen Event-Handler wie im ersten Beispiel einfügen, wird er jedes Mal ausgeführt, wenn sich die Dateieingabe ändert und ein neuer Event-Handler registriert wird. Also, wenn Sie eine Datei auswählen entscheiden, es zu ändern, Datei-Eingang ändert sich zweimal und Sie erhalten 2 Klick-Ereignisse registriert. Klicken Sie nun auf den Button, Sie erhalten 2 neue Konsolen-Logs mit einem Klick !!! Probieren Sie es ..

  

Warum wird das click -Ereignis der ersten Eingabedatei ausgeführt, wenn dies der Fall ist?   War keine Änderung des Ereignisses

Da der Event-Handler funktioniert, registrieren Sie sich einmal, sie werden jedes Mal danach ausgelöst.

  

Welcher der beiden Wege ist besser (und am richtigsten), um den Code auszuführen?   und warum?

Offensichtlich nicht der erste, weil es eine schlechte Idee ist, auch nicht der zweite. Im zweiten Fall verbinden Sie das Ereignis mit einer Division, die die Schaltfläche enthält. Sie brauchen also nicht auf den Button zu klicken, klicken Sie einfach irgendwo rechts neben dem Button, das Event wird ausgelöst !!!

  

Also, wenn keiner von ihnen richtig ist, was können wir tun?

  • Erzeuge keine Schaltfläche / kein HTML-Element per Javascript für so einfache Aufgaben. Mach es mit HTML, ganz einfach.
  • Verschachteln Sie den Event-Handler nicht in einen anderen, d. h. setzen Sie einen Event-Handler in einen anderen, es wird die Dinge komplizieren. Legen Sie alle Event-Handler direkt in das document.ready -Ereignis von jQuery . document.ready wird nur einmal ausgelöst.
  • Wenn Sie die Benutzeraktion steuern möchten, dann zeigen Sie Ihre Schaltfläche oder ein anderes html-Element basierend auf den erforderlichen Bedingungen per Javascript an / verbergen Sie sie.
  

Mein Vorschlag ist, so etwas zu tun.

%Vor%     
Munim Munna 06.02.2018, 19:48
quelle
2
  

Welche der beiden Möglichkeiten ist besser (und am richtigsten), um den Code auszuführen und warum?

Ich glaube, das ist besser:

%Vor%

Hauptsächlich, weil es besser lesbar und einfach zu befolgen ist. Nach dem Ändern der Eingabe muss das Button-Klick-Ereignis nicht eingerichtet werden. Es ist besser, den STATUS der Schaltfläche zu ändern, wie Sie es tun. Noch besser wäre es, den Button wie folgt zu verstecken / anzeigen:

%Vor%

Und habe es anfangs versteckt mit:

%Vor%
  

Warum wird das click -Ereignis der ersten Eingabedatei ausgeführt, wenn keine Ereignisänderung stattgefunden hat?

In meinem Test hat das alles richtig funktioniert.

  

Wie heißt das?

Die Änderungsereignisse sollten nur aufgerufen werden, wenn Sie auf die Eingabe klicken und eine Datei zuweisen.

    
benjaminhull 02.02.2018 15:00
quelle
1

Sie binden dasselbe Ereignis mehrmals an dasselbe Schaltflächenobjekt. Das gleiche Ereignis an dasselbe Objekt in einem anderen Ereignis zu binden, das erneut auftreten kann, führt dazu, dass es immer und immer wieder gebunden wird (stapelt Ereignisse und feuert sie ab und in diesem Fall "es" mehrmals). Das Binden einer Aktion an ein Ereignis sollte nur einmal pro Objekt erfolgen. und ich sehe, dass Sie das Click-Ereignis an das div anstelle der Schaltfläche binden. Vielleicht müssen Sie dynamische Bindung mit .on() wie folgt berücksichtigen

%Vor% %Vor%

Beachten Sie, dass Sie nicht wie in meinem Code

eine Datei auswählen müssen (z. B. Dateien zählen ist 0)     
CME64 07.02.2018 07:56
quelle
0
  

Setzen Sie ein Ereignis in ein Ereignis, hat es einen Namen?

Es hat einen Namen. Es heißt "Daisy Chaining" und es ist keine gute Idee.

    
P M 13.02.2018 12:02
quelle
0

nicht genug Rep zu kommentieren

Ich hatte einen Grund, dies zu tun. Ich hatte die unangenehme Aufgabe, durch 2 Jahre Code von einer Person mit wenig Wartung oder Code-Disziplin zu misten. Ich wollte die Code-Struktur intakt halten, also kaskadierte ich Click-Events, um einige Verbesserungen vorzunehmen.

Um einige Probleme zu vermeiden, die in den besseren Antworten oben erwähnt wurden, denken Sie daran, $(selector).off("click") vor dem Binden des nächsten Ereignisses aufzurufen.

    
Edwin Chua 13.02.2018 12:09
quelle

Tags und Links