Finden Sie, ob 'cancel' bei der Dateieingabe angeklickt wurde

8

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)

    
SamSharma 06.04.2014, 19:27
quelle

3 Antworten

10

Eine Lösung ist die Verwendung des onchange -Ereignisses von input .

%Vor%

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.

%Vor%

Hier ist eine funktionierende Version: Ссылка .

    
Michael 06.04.2014 22:30
quelle
0
  

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.

    
Abhi Beckert 06.04.2014 22:36
quelle
0

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.

    
Simon Sawyer 19.11.2017 19:30
quelle

Tags und Links