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:
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?
%Vor%Mein Vorschlag ist, so etwas zu tun.
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.
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
Beachten Sie, dass Sie nicht wie in meinem Code
eine Datei auswählen müssen (z. B. Dateien zählen ist 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.
Tags und Links javascript jquery