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.