Ich möchte die Dateieingabe in meinem Formular löschen.
Ich weiß, wie man die Quellen auf dieselbe Methode setzt ... Aber diese Methode löscht den ausgewählten Dateipfad nicht.
Hinweis : Ich möchte vermeiden, dass die Seite neu geladen, das Formular zurückgesetzt oder ein AJAX-Aufruf ausgeführt werden muss.
Ist das möglich?
javascript
html
thomaux
quelle
quelle
Es gibt drei Möglichkeiten, die Dateieingabe mit Javascript zu löschen:
Setzen Sie die value-Eigenschaft auf leer oder null.
Funktioniert für IE11 + und andere moderne Browser.
Erstellen Sie ein neues Dateieingabeelement und ersetzen Sie das alte.
Der Nachteil ist, dass Sie Ereignis-Listener und expando-Eigenschaften verlieren.
Setzen Sie das Eigentümerformular über die Methode form.reset () zurück.
Um zu vermeiden, dass andere Eingabeelemente im selben Eigentümerformular beeinflusst werden, können wir ein neues leeres Formular erstellen und das Dateieingabeelement an dieses neue Formular anhängen und zurücksetzen. Diese Methode funktioniert für alle Browser.
Ich habe eine Javascript-Funktion geschrieben. Demo: http://jsbin.com/muhipoye/1/
quelle
tl; dr : Für moderne Browser verwenden Sie einfach
Alte Antwort:
Wie wäre es mit:
Ich muss noch verstehen, warum dies mit Webkit nicht funktioniert .
Auf jeden Fall funktioniert dies mit IE9>, Firefox und Opera.
Die Situation mit dem Webkit ist, dass ich es anscheinend nicht wieder in eine Datei ändern kann.
Bei IE8 wird eine Sicherheitsausnahme ausgelöst.
Bearbeiten: Für Webkit, Opera und Firefox funktioniert dies jedoch:
(Überprüfen Sie die obige Antwort mit diesem Vorschlag)
Ich werde sehen, ob ich einen saubereren Weg finden kann, diesen Cross-Browser ohne die Notwendigkeit des GC durchzuführen.
Edit2:
Funktioniert mit den meisten Browsern. Funktioniert nicht mit IE <9, das ist alles.
Getestet auf Firefox 20, Chrome 24, Oper 12, IE7, IE8, IE9 und IE10.
quelle
Setzen Sie den Wert auf
''
funktioniert nicht in allen Browsern.Versuchen Sie stattdessen, den Wert
null
so einzustellen, dass er Ihnen gefällt:BEARBEITEN: Ich erhalte die sehr gültigen Sicherheitsgründe dafür, dass JS die Dateieingabe nicht festlegen darf. Es erscheint jedoch sinnvoll, einen einfachen Mechanismus zum Löschen der bereits ausgewählten Ausgabe bereitzustellen . Ich habe versucht, eine leere Zeichenfolge zu verwenden, aber es hat nicht in allen Browsern funktioniert.
NULL
funktioniert, die ich ausprobiert habe (Opera, Chrome, FF, IE11 + und Safari).BEARBEITEN: Bitte beachten Sie, dass die Einstellung auf
NULL
in allen Browsern funktioniert, während die Einstellung auf eine leere Zeichenfolge nicht funktioniert.quelle
all browsers
... es funktioniert nicht in IE8, IE9 oder IE10 (aber funktioniert in IE11).Leider scheint keine der obigen Antworten alle Grundlagen abzudecken - zumindest nicht bei meinen Tests mit Vanille-Javascript.
.value = null
scheint auf FireFox, Chome, Opera und IE11 zu funktionieren (aber nicht auf IE8 / 9/10 ).cloneNode
(und.clone()
in jQuery) in FireFox scheint das.value
Over zu kopieren , wodurch der Klon sinnlos wird.Hier ist die Vanille-Javascript-Funktion, die ich geschrieben habe und die unter FireFox (27 und 28), Chrome (33), IE (8, 9, 10, 11), Opera (17) funktioniert. Dies sind die einzigen derzeit verfügbaren Browser zu mir zu testen.
Der
ctrl
Parameter ist die Dateieingabe selbst, daher würde die Funktion als ...quelle
if
Anweisung nicht in dencatch
Block eingefügt werden?null
. Möchten Sie erklären, wozu es dann gut ist,ctrl.value = null;
in einentry...catch
Block zu stecken? Entschuldigung für die neue Frage.ctrl.parentNode.replaceChild(ctrl.cloneNode(true), ctrl);
- Ab wann löschen wir den Wert tatsächlich, da ercloneNode
auch kopiert wird?LÖSUNG
Der folgende Code hat bei mir mit jQuery funktioniert. Es funktioniert in jedem Browser und ermöglicht das Beibehalten von Ereignissen und benutzerdefinierten Eigenschaften.
DEMO
Code und Demonstration finden Sie in dieser jsFiddle .
LINKS
<Input type = 'file' /> mit jQuery löschen
So setzen Sie die Dateieingabe mit JavaScript zurück
quelle
Sie müssen es durch eine neue Dateieingabe ersetzen. So geht's mit jQuery:
und verwenden Sie diese Zeile, wenn Sie das Eingabefeld löschen müssen (z. B. bei einem Ereignis):
quelle
Bearbeiten:
Dieser funktioniert nicht in IE und Oper, scheint aber für Firefox, Safari und Chrome zu funktionieren.
quelle
Ich hatte das gleiche Problem und habe mir das ausgedacht.
quelle
Das ist eigentlich ganz einfach.
quelle
Ich habe nach einer einfachen und sauberen Möglichkeit gesucht, die Eingabe von HTML-Dateien zu löschen. Die obigen Antworten sind großartig, aber keine von ihnen beantwortet wirklich das, wonach ich suche, bis ich im Web auf einfache und elegante Weise darauf gestoßen bin:
Der gesamte Kredit geht an Chris Coyier .
quelle
Die obigen Antworten bieten aus folgenden Gründen etwas ungeschickte Lösungen:
Ich mag sie nicht zu haben ,
wrap
dieinput
ersten und dann die HTML bekommen, es ist sehr aufwendig und schmutzig.Cross-Browser-JS ist praktisch und es scheint, dass es in diesem Fall zu viele Unbekannte gibt, um das
type
Umschalten (was wiederum etwas schmutzig ist) und das Einstellenvalue
auf zuverlässig zu verwenden''
Deshalb biete ich Ihnen meine jQuery-basierte Lösung an:
Es macht das, was es sagt, es ersetzt die Eingabe durch einen Klon von sich. Auf dem Klon wird die Datei nicht ausgewählt.
Vorteile:
Ergebnis: Glücklicher Programmierer
quelle
Cross browser compatibility
... meine Tests zeigen, dass FireFox.value
als Teil der über kopiert.clone()
, wodurch es unbrauchbar wirdreplaceWith
? Ich benutzeclone()
mich selbst und es funktioniert gut in Firefox (ich weiß nicht, ob dies ein Jahr später noch bei Ihnen der Fall ist =))Was mir geholfen hat, ist, dass ich versucht habe, die zuletzt ausgewählte Datei mithilfe einer Schleife abzurufen und hochzuladen, anstatt die Warteschlange zu leeren, und es hat funktioniert. Hier ist der Code.
Hoffe das könnte einigen helfen.
quelle
Ich habe die meisten Lösungen ausprobiert, aber es schien, als würde niemand funktionieren. Allerdings habe ich unten einen Spaziergang dafür gefunden.
Die Struktur des Formulars ist:
form
=>label
,input
undsubmit button
. Nachdem wir eine Datei ausgewählt haben, wird der Dateiname von der Beschriftung manuell in JavaScript angezeigt.Meine Strategie lautet also: zunächst das Submit
button
deaktiviert. Nachdem eine Datei ausgewählt wurde, wird dasdisabled
Attribut der Schaltfläche " Senden" entfernt, sodass ich eine Datei senden kann. Nachdem ich eingereicht habe, lösche ich daslabel
, wodurch es so aussieht, als würde ich die Datei löschen,input
aber eigentlich nicht. Dann werde ich die Schaltfläche "Senden" wieder deaktivieren, um das Senden des Formulars zu verhindern.Wenn Sie "Senden" festlegen
button
disable
oder nicht, kann ich verhindern, dass die Datei mehrmals gesendet wird, es sei denn, ich wähle eine andere Datei aus.quelle
Hier sind meine zwei Cent, die Eingabedateien werden als Array gespeichert, also hier ist, wie man sie auf Null setzt
Dies gibt ein leeres Array zurück und funktioniert in allen Browsern
quelle
Ich habe geändert, um Text einzugeben und zurück, um mit setAttribute in eine Datei einzugeben
quelle