Je souhaite effacer l'entrée de fichier dans mon formulaire.
Je sais comment définir les sources sur la même méthode ... Mais cette méthode n'effacera pas le chemin du fichier sélectionné.
Remarque : je voudrais éviter d'avoir à recharger la page, réinitialiser le formulaire ou effectuer un appel AJAX.
Est-ce possible?
javascript
html
Thomaux
la source
la source
Il existe 3 façons d'effacer l'entrée de fichier avec javascript:
définissez la propriété value sur vide ou null.
Fonctionne pour IE11 + et d'autres navigateurs modernes.
Créez un nouvel élément d'entrée de fichier et remplacez l'ancien.
L'inconvénient est que vous perdrez les écouteurs d'événements et les propriétés d'expansion.
Réinitialisez le formulaire du propriétaire via la méthode form.reset ().
Pour éviter d'affecter d'autres éléments d'entrée dans le même formulaire propriétaire, nous pouvons créer un nouveau formulaire vide et ajouter l'élément d'entrée de fichier à ce nouveau formulaire et le réinitialiser. Cette méthode fonctionne pour tous les navigateurs.
J'ai écrit une fonction javascript. démo: http://jsbin.com/muhipoye/1/
la source
tl; dr : Pour les navigateurs modernes, utilisez simplement
Ancienne réponse:
Que diriez-vous:
Je dois encore comprendre pourquoi cela ne fonctionne pas avec Webkit .
Quoi qu'il en soit, cela fonctionne avec IE9>, Firefox et Opera.
La situation avec Webkit est que je semble ne pas pouvoir le remettre en fichier.
Avec IE8, la situation est qu'il lève une exception de sécurité.
Edit: Pour Webkit, Opera et Firefox, cela fonctionne, cependant:
(vérifiez la réponse ci-dessus avec cette proposition)
Je vais voir si je peux trouver une manière plus propre de faire ce cross-browser sans avoir besoin du GC.
Edit2:
Fonctionne avec la plupart des navigateurs. Ne fonctionne pas avec IE <9, c'est tout.
Testé sur Firefox 20, Chrome 24, Opera 12, IE7, IE8, IE9 et IE10.
la source
La définition de la valeur sur
''
ne fonctionne pas dans tous les navigateurs.Essayez plutôt de définir la valeur
null
comme suit:EDIT: J'obtiens les raisons de sécurité très valables pour ne pas autoriser JS à définir l'entrée de fichier, mais il semble raisonnable de fournir un mécanisme simple pour effacer déjà la sélection de sortie. J'ai essayé d'utiliser une chaîne vide mais cela ne fonctionnait pas dans tous les navigateurs,
NULL
fonctionnait dans tous les navigateurs que j'ai essayés (Opera, Chrome, FF, IE11 + et Safari).EDIT: Veuillez noter que le réglage sur
NULL
fonctionne sur tous les navigateurs tandis que le réglage sur une chaîne vide ne l'a pas fait.la source
all browsers
... cela ne fonctionne pas dans IE8, IE9 ou IE10 (mais fonctionne dans IE11).Malheureusement, aucune des réponses ci-dessus ne semble couvrir toutes les bases - du moins pas avec mes tests avec javascript vanille.
.value = null
semble fonctionner sur FireFox, Chome, Opera et IE11 (mais pas IE8 / 9/10 ).cloneNode
(et.clone()
dans jQuery) sur FireFox semble copier le.value
dessus, rendant ainsi le clone inutile.Voici donc la fonction javascript vanille que j'ai écrite qui fonctionne sur FireFox (27 et 28), Chrome (33), IE (8, 9, 10, 11), Opera (17) ... ce sont les seuls navigateurs actuellement disponibles à moi de tester avec.
Le
ctrl
paramètre est l'entrée de fichier elle-même, donc la fonction serait appelée comme ...la source
if
déclaration ne devrait-elle pas être placée à l'intérieur ducatch
bloc?null
. Ça vous dérange d'expliquer à quoi sert alors de mettre à l'ctrl.value = null;
intérieur d'untry...catch
bloc? Désolé pour la question newb.ctrl.parentNode.replaceChild(ctrl.cloneNode(true), ctrl);
- à quel moment nous effaçons-nous réellement la valeur, puisque lacloneNode
copie également?SOLUTION
Le code suivant a fonctionné pour moi avec jQuery. Il fonctionne dans tous les navigateurs et permet de conserver les événements et les propriétés personnalisées.
DEMO
Voir ce jsFiddle pour le code et la démonstration.
LIENS
Effacer <input type = 'file' /> à l'aide de jQuery
Comment réinitialiser l'entrée de fichier avec JavaScript
la source
Vous devez le remplacer par une nouvelle entrée de fichier. Voici comment cela peut être fait avec jQuery:
et utilisez cette ligne lorsque vous devez effacer le champ de saisie (sur un événement par exemple):
la source
Edit:
Celui-ci ne fonctionne pas dans IE et Opera, mais semble fonctionner pour Firefox, Safari et Chrome.
la source
J'avais le même problème et j'ai trouvé ça.
la source
C'est en fait assez simple.
la source
Je cherchais un moyen simple et propre d'effacer l'entrée de fichier HTML, les réponses ci-dessus sont excellentes, mais aucune d'entre elles ne répond vraiment à ce que je recherche, jusqu'à ce que je tombe sur le Web avec une manière simple et élégante de le faire:
tout le mérite revient à Chris Coyier .
la source
Les réponses ci-dessus offrent des solutions quelque peu maladroites pour les raisons suivantes:
Je n'aime pas avoir
wrap
leinput
premier et ensuite obtenir le html, c'est très compliqué et sale.Cross browser JS est pratique et il semble que dans ce cas, il y ait trop d'inconnues pour utiliser de manière fiable la
type
commutation (qui, encore une fois, est un peu sale) et le réglagevalue
sur''
Je vous propose donc ma solution basée sur jQuery:
Il fait ce qu'il dit, il remplace l'entrée par un clone de lui-même. Le clone n'aura pas le fichier sélectionné.
Avantages:
Résultat: programmeur heureux
la source
Cross browser compatibility
... mes tests montrent que FireFox copie le dans le.value
cadre du.clone()
, le rendant donc inutilereplaceWith
? Je m'utilise moi-clone()
même et cela fonctionne bien dans Firefox (je ne sais pas si c'est toujours le cas pour vous un an plus tard =))Voici mes deux cents, les fichiers d'entrée sont stockés sous forme de tableau, voici comment l'annuler
cela renvoie un tableau vide et fonctionne sur tous les navigateurs
la source
Ce qui m'a aidé, c'est que j'ai essayé de récupérer et de télécharger le dernier fichier sélectionné en utilisant une boucle, au lieu de vider la file d'attente, et cela a fonctionné. Voici le code.
J'espère que cela pourrait aider certains.
la source
J'ai essayé la plupart des solutions, mais il ne semblait que personne ne fonctionnait. Cependant, j'ai trouvé une promenade pour cela ci-dessous.
La structure du formulaire est:
form
=>label
,input
etsubmit button
. Après avoir choisi un fichier, le nom du fichier sera affiché par l'étiquette en le faisant manuellement dans JavaScript.Ma stratégie est donc la suivante: initialement, la soumission
button
est désactivée, après qu'un fichier est choisi, l'disabled
attribut du bouton d' envoi sera supprimé de sorte que je puisse soumettre le fichier. Après avoir soumis, j'efface le,label
ce qui donne l'impression d'effacer le fichier,input
mais ce n'est pas le cas. Ensuite, je désactiverai à nouveau le bouton d'envoi pour éviter de soumettre le formulaire.En définissant la soumission
button
disable
ou non, j'arrête la soumission du fichier plusieurs fois, sauf si je choisis un autre fichier.la source
J'ai changé pour taper du texte et revenir à taper dans un fichier en utilisant setAttribute
la source
Il
input.value = null
s'agit d'une méthode de travail, mais elle ne déclenchera l'change
événement d'entrée que si elle est appelée à partir d'unonclick
événement.La solution à cela serait d'appeler ce
onchange
gestionnaire manuellement chaque fois que vous devez réinitialiser l'entrée.la source