Existe-t-il une chance de détecter chaque sélection de fichier effectuée par l'utilisateur pour un élément HTML input
de type file
?
Cela a déjà été demandé à plusieurs reprises auparavant, mais l'événement onchange
généralement proposé ne se déclenche pas si l'utilisateur sélectionne à nouveau le même fichier.
Définissez la valeur de input
sur null
pour chaque événement onclick
. Cela réinitialisera la valeur de input
et déclenchera l'événement onchange
même si le même chemin est sélectionné.
input.onclick = function () {
this.value = null;
};
input.onchange = function () {
alert(this.value);
};
Remarque: Il est normal que votre fichier porte le préfixe 'C:\fakepath \'. C'est une fonctionnalité de sécurité qui empêche JavaScript de connaître le chemin absolu du fichier. Le navigateur le sait toujours en interne.
<form enctype='multipart/form-data'>
<input onchange="alert(this.value); this.value=null; return false;" type='file'>
<br>
<input type='submit' value='Upload'>
</form>
this.value=null;
n'est nécessaire que pour Chrome, Firefox fonctionnera correctement avec return false;
Voici un VIOLON
Dans cet article, sous le titre "Utilisation de la saisie de formulaire pour la sélection"
http://www.html5rocks.com/en/tutorials/file/dndfiles/
<input type="file" id="files" name="files[]" multiple />
<script>
function handleFileSelect(evt) {
var files = evt.target.files; // FileList object
// files is a FileList of File objects. List some properties.
var output = [];
for (var i = 0, f; f = files[i]; i++) {
// Code to execute for every file selected
}
// Code to execute after that
}
document.getElementById('files').addEventListener('change',
handleFileSelect,
false);
</script>
Il ajoute un écouteur d'événement à 'changer', mais je l'ai testé et il se déclenche même si vous choisissez le même fichier et non si vous annulez.
Faites ce que vous voulez faire après le chargement du fichier avec succès. Après la fin du traitement de votre fichier, définissez la valeur du contrôle de fichier sur string.so. comme par exemple vous pouvez faire cette chose et a travaillé pour moi comme un charme
$('#myFile').change(function () {
LoadFile("myFile");//function to do processing of file.
$('#myFile').val('');// set the value to empty of myfile control.
});
Utilisez l'événement onClick pour effacer la valeur de l'entrée cible, chaque fois que l'utilisateur clique sur un champ. Cela garantit que l'événement onChange sera également déclenché pour le même fichier. Travaillé pour moi :)
onInputClick = (event) => {
event.target.value = ''
}
<input type="file" onChange={onFileChanged} onClick={onInputClick} />
Utiliser TypeScript
onInputClick = ( event: React.MouseEvent<HTMLInputElement, MouseEvent>) => {
const element = event.target as HTMLInputElement
element.value = ''
}