Ich habe versucht, einen Hack zu verwenden, der an verschiedenen Stellen beschrieben wurde und folgendes verwendet:
%Vor%Ein Beispiel:
%Vor% Stimmt hier etwas nicht? Weil fileSelectedEle.value
immer den vorherigen Ausführungswert und NICHT den vom Benutzer ausgewählten zurückgibt.
Ist dies das erwartete Verhalten der Eingabedatei? Wie löst man das, um die ausgewählte Datei zu lesen?
Sie können den Fehler folgendermaßen reproduzieren:
Schritt 1: SelectFile - einige wählen eine Datei (und beachten Sie die Ausgabe)
Schritt 2: SelectFile - Abbrechen drücken (und die Ausgabe bemerken)
Eine Lösung ist die Verwendung des onchange
-Ereignisses von input
.
Dies reagiert korrekt auf Änderungen im ausgewählten Dateinamen, wie Sie hier testen können: Ссылка
Der einzige mögliche Unterschied im Verhalten von der Art und Weise, wie Sie es versuchten, besteht darin, dass das Ereignis nicht ausgelöst wird, wenn Sie sofort oder zweimal hintereinander abbrechen oder dieselbe Datei zweimal hintereinander auswählen . Jedes Mal, wenn sich der Dateiname ändert, erkennen Sie ihn jedoch korrekt.
Ich weiß nicht genau, warum Ihr ursprünglicher Versuch nicht funktioniert hat, obwohl meine Vermutung ist, dass es sich um ein Timing-Problem handelt, bei dem das onfocus
-Ereignis asynchron abfeuert und bevor die input
-Steuerelemente die Aktualisierung beendet haben.
UPDATE: Um zu bestimmen, was der Benutzer bei jedem Schließen des Dateidialogs ausgewählt hat, kann das Timingproblem umgangen werden, indem eine kurze Verzögerung zwischen dem erneuten Empfangen des Fokus und dem Hinzufügen des Fokus hinzugefügt wird Überprüfen Sie den Wert der Dateieingabe. Anstatt checkOnCancel
sofort nach dem Empfangen des Fokus aufzurufen, bewirkt die folgende Version von charge
, dass sie eine Zehntelsekunde später aufgerufen wird.
Hier ist eine funktionierende Version: Ссылка .
Stimmt hier etwas nicht? Da fileSelectedEle.value immer den vorherigen Ausführungswert und NICHT den vom Benutzer ausgewählten Wert zurückgibt. Ist dies das erwartete Verhalten der Eingabedatei? Wie löst man das, um die ausgewählte Datei zu lesen?
Es ist nichts falsch, das ist das erwartete Verhalten. Wenn der Benutzer den Dateiauswahlprozess abbricht, dann ist es so, als hätten sie ihn nie gestartet. Also der vorherige Wert bleibt an Ort und Stelle.
Sie können sich in das window.focus
-Ereignis einklinken, das ausgelöst wird, wenn das Auswahlfenster für die Datei des Fensters gelöscht wird. Überprüfen Sie dann, ob tatsächlich eine Datei ausgewählt ist.
Tags und Links javascript html file input