So löschen Sie die Dateieingabe


86

Unten ist ein Teil des JQuery-Codes, der die Dateieingabe und die Schaltfläche "Datei löschen" anzeigt.

var $imagefile = $('<input />').attr({
    type: 'file',
    name: 'imageFile',
    class: 'imageFile'
});

$image.append($imagefile);

var $imageclear = $('<input />').attr({
    type: 'button',
    name: 'imageClear',
    class: 'imageClear',
    value: 'Clear File'
});

$image.append($imageclear);

Der Grund, warum ich die Schaltfläche "Datei löschen" habe, ist, dass wenn Sie auf die Schaltfläche klicken, alles gelöscht wird, was in der Dateieingabe enthalten ist. Wie codiere ich es so, dass die Dateieingabe tatsächlich gelöscht wird, wenn ich auf die Schaltfläche "Datei löschen" klicke?



Antworten:


160

Das sollte funktionieren:

$imageClear.on('click', function() { 
    $imageFile.val(''); 
});

1
Ja, es ist ein relativ einfacher jQuery-Code. Es ist eine browserübergreifende Lösung.
Guillaume Poussel

3
Leute, <input type=file />ist readonlynach Auswahl der Datei in> = IE8 aus Sicherheitsgründen hier das ähnliche Q und Korrespondent A für die hier vorgeschlagene Lösung.
Paul T. Rawkeen

1
<input type=file />Der Datentyp ist Datei. Wir können ihn nicht löschen, indem wir eine leere Zeichenfolge an das Eingabefeld übergeben.
Usman Mughal

Ich arbeite auch an Chrome. Das kann nützlich sein, um diesen stackoverflow.com/a/11953476/1830909 und meinen Kommentar darunter zu sehen.
QMaster

1
Wie kann ich Dateien beim Hochladen mehrerer Dateien in die Dateieingabe mit jquery entfernen?
Immer ein Lernender

42

Löschen Sie die Dateieingabe mit jQuery

$("#fileInputId").val(null);

Löschen Sie die Dateieingabe mit JavaScript

document.getElementById("fileInputId").value = null;

7

Dies ist die Methode, die ich auch gerne verwende, aber ich glaube, Sie müssen den Parameter bool true zur Klonmethode hinzufügen, damit alle Ereignisse mit dem neuen Objekt verknüpft bleiben und Sie den Inhalt löschen müssen.

    var input = $("#fileInput");

    function clearInput() {
        input = input.val('').clone(true);
    };

https://api.jquery.com/clone/



3

für React-Benutzer

e.target.value = ""

Wenn das Dateieingabeelement jedoch von einem anderen Element (mit einem htmlForAttribut) ausgelöst wird, bedeutet dies, dass Sie das Ereignis nicht haben

Sie könnten also eine Referenz verwenden:

zu Beginn der Funktion:

const inputRef = React.useRef();

auf Eingabeelement

<input type="file" ref={inputRef} />

und dann auf einer onClick-Funktion (zum Beispiel) können Sie schreiben

inputRef.current.value = "" 
  • in Reaktionsklassen - gleiche Idee, aber Unterschied im Konstruktor: this.inputRef = React.createRef()

1

Eine andere Lösung, wenn Sie sicher sein möchten, dass dies browserübergreifend ist, besteht darin, das Tag zu entfernen () und dann anzufügen () oder voranzustellen () oder auf andere Weise eine neue Instanz des Eingabe-Tags mit denselben Attributen erneut hinzuzufügen .

<form method="POST" enctype="multipart/form-data">
<label for="fileinput">
 <input type="file" name="fileinput" id="fileinput" />
</label>
</form>

$("#fileinput").remove();
$("<input>")
  .attr({
    type: 'file',
    id: 'fileinput',
    name: 'fileinput'
    })
  .appendTo($("label[for='fileinput']"));


0

Ich habe so etwas gemacht und es funktioniert für mich

$('#fileInput').val(null); 

0

In meinem Fall haben andere Lösungen nicht so funktioniert:

$('.bootstrap-filestyle :input').val('');

Wenn Sie jedoch mehr als eine Dateieingabe auf einer Seite haben, wird der Text auf allen Dateien zurückgesetzt.


0

Geben Sie die Eingabe-ID ein und setzen Sie val wie folgt leer: Hinweis: Setzen Sie kein Leerzeichen zwischen val leere doppelte Anführungszeichen val ("").

 $('#imageFileId').val("")

0

Dieser Code funktioniert für alle Browser und alle Eingaben.

$('#your_target_input').attr('value', '');

Ich empfehle Ihnen wie:$(document).ready(function( {$('#your_target_input').attr('value', ''); } );
reza laki
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.