Wie überprüfe ich, ob eine FormData-Datei leer ist?

9

Ich erstelle ein AJAX-Formular, das die Option enthält, entweder eine Hintergrundfarbe anzugeben oder ein Hintergrundbild hochzuladen. Das Ziel ist, dass das Feld bgColor ignoriert wird, wenn eine Datei für das Feld bgImg angegeben wurde.

%Vor%

Ich dachte, der einfachste Weg, um die Formulardaten zu sammeln, ist natürlich die FormData API:

%Vor%

Das Problem ist, ich weiß nicht, wie man das FormData-Objekt prüft, ob eine Datei ausgewählt wurde oder nicht. Ob die Dateieingabe leer ist oder nicht, fd.has('bgImg') gibt wahr zurück, weil das Feld vorhanden ist - okay, das ist sinnvoll.

Aber obwohl fd.get('bgImg') funktioniert, wenn eine Datei angegeben wurde, und ich kann dann den positiven Fall überprüfen, wenn die Dateieingabe leer ist, stürzt diese Zeile gerade meinen Browser ab! (Ich habe nur in Firefox eingecheckt, aber es passiert konsistent, ob in meinem tatsächlichen Skript oder von der Browser-Konsole.) Leider ist eine "Überprüfung, ob es eine Datei" -Operation, die erkennbar aber unentscheidbar ist, effektiv nutzlos. Wie soll ich herausfinden, ob das Feld bgImg leer ist?

Mir ist klar, dass ich auch nur das elements['bgImg'].files -Objekt des Formulars überprüfen kann, aber die FormData-API ist schon da, und sie ist ordentlicher, und es wäre einfacher, wenn es nicht offensichtlich verhext wäre! Also vermisse ich etwas? Wenn dies der falsche Weg ist, das vermeintlich bequeme FormData-Objekt zu verwenden, was soll ich dann stattdessen tun? Ist das Überprüfen der files Sammlung tatsächlich die einzige Lösung?

BEARBEITEN: Eine weitere Untersuchung zeigt, dass diese API in anderen Browsern als Firefox ziemlich schlecht unterstützt wird. Daher ist die Überprüfung von element.files wahrscheinlich die bessere Lösung. Ich bin immer noch verwirrt darüber, warum das den Browser in Firefox zum Absturz bringen würde. Wenn eine Antwort auf diese Front nicht kurz bevorsteht, werde ich wahrscheinlich meine eigene Antwort einreichen.

    
endemic 23.07.2015, 22:36
quelle

2 Antworten

1

Dieses Verhalten der FormData API in Firefox scheint leider ein Fehler zu sein. Angesichts der eher minimalen Unterstützung für die FormData-Methoden in allen Browsern ist es jedoch besser Lösung ist wohl, die Formularelemente trotzdem zu überprüfen:

%Vor%     
endemic 24.07.2015, 02:01
quelle
-1
%Vor%     
Johan 19.10.2017 13:19
quelle

Tags und Links