Je souhaite déclencher un événement lorsque l'utilisateur sélectionne un fichier. Le faire avec.change
événement si l'utilisateur modifie le fichier à chaque fois.
Mais je veux déclencher l'événement si l'utilisateur sélectionne à nouveau le même fichier.
- Fichier de sélection de l'utilisateur
A.jpg
(l'événement se déclenche) - Fichier de sélection de l'utilisateur
B.jpg
(l'événement se déclenche) - Fichier de sélection de l'utilisateur
B.jpg
(l'événement ne se déclenche pas, je veux qu'il se déclenche)
Comment puis-je le faire?
jquery
html
events
cross-browser
Gadonski
la source
la source
.attr("value", "")
ou.val("")
(comme suggéré par @ wagner-leonardi ci-dessous), Internet Explorer déclenchera l'événement de changement alors que Chrome ne le fera pas.prop("value", "")
Si vous avez essayé
.attr("value", "")
et que vous n'avez pas travaillé, ne paniquez pas (comme je l'ai fait)faites simplement à la
.val("")
place et fonctionnera bienla source
Vous pouvez simplement définir à null le chemin du fichier chaque fois que l'utilisateur clique sur le contrôle. Désormais, même si l'utilisateur sélectionne le même fichier, l' événement onchange sera déclenché.
la source
Utilisez l'événement onClick pour effacer la valeur de l'entrée cible, chaque fois que l'utilisateur clique sur le champ. Cela garantit que l'événement onChange sera également déclenché pour le même fichier. A travaillé pour moi :)
Utilisation de TypeScript
la source
J'ai fait fonctionner cela en effaçant la valeur d'entrée du fichier onClick, puis en publiant le fichier onChange. Cela permet à l'utilisateur de sélectionner le même fichier deux fois de suite tout en conservant le déclenchement de l'événement de modification à publier sur le serveur. Mon exemple utilise le plugin de formulaire jQuery .
la source
onClick
se déclenche avantonChange
, donc cette méthode fonctionne très bien pour moi.Ce travail pour moi
la source
Solution VueJs
la source
Inspiré de @braitsch, j'ai utilisé ce qui suit dans mon AngularJS2
input-file-component
Voici le
onClick(event)
m'a sauvé :-)la source
La chose la plus simple à faire est probablement de définir la valeur sur une chaîne vide. Cela l'oblige à «changer» le fichier à chaque fois, même si le même fichier est à nouveau sélectionné.
<input type="file" value="" />
la source
Voici la solution React-y Way que j'ai trouvée qui a fonctionné pour moi:
onClick={event => event.target.value = null}
la source
Si vous ne souhaitez pas utiliser jQuery
Cela fonctionne bien dans Firefox, mais pour Chrome, vous devez ajouter
this.value=null;
après l'alerte.la source
Par défaut, la propriété value de l'élément d'entrée est effacée après la sélection des fichiers si l'entrée a plusieurs attributs. Si vous ne nettoyez pas cette propriété, l'événement "modification" ne sera pas déclenché si vous sélectionnez le même fichier. Vous pouvez gérer ce comportement à l'aide de l'
multiple
attribut.Référence
la source
Vous ne pouvez pas faire de
change
feu ici (comportement correct, puisque rien n'a changé). Cependant, vous pouvez également vous lierclick
... bien que cela puisse tirer trop souvent ... il n'y a pas beaucoup de terrain d'entente entre les deux cependant.la source
.click()
n'est pas "feu sur re-select".click
c'est aussi proche que possible.Créez pour l'entrée un événement de clic et un événement de modification. L'événement click vide l'entrée et l'événement change contient le code que vous souhaitez exécuter.
Ainsi, l'événement de clic se vide lorsque vous cliquez sur le bouton d'entrée (avant que la fenêtre de sélection de fichier ne s'ouvre), par conséquent, l'événement de modification se déclenchera toujours lorsque vous sélectionnez un fichier.
la source
Vous pouvez utiliser
form.reset()
pour effacer lafiles
liste des entrées de fichier . Cela réinitialisera tous les champs aux valeurs par défaut, mais dans de nombreux cas, vous n'utiliserez peut-être que l'entrée type = 'file' dans un formulaire pour télécharger des fichiers de toute façon. Dans cette solution, il n'est pas nécessaire de cloner l'élément et de reconnecter les événements.Merci à philiplehmann
la source
Je suis tombé sur le même problème, j'ai parcouru les solutions ci-dessus mais ils n'ont pas obtenu de bonne explication de ce qui se passait vraiment.
Cette solution que j'ai écrite https://jsfiddle.net/r2wjp6u8/ ne fait pas beaucoup de changements dans l'arborescence DOM, elle change juste les valeurs du champ de saisie. Du point de vue des performances, cela devrait être un peu mieux.
Lien vers violon: https://jsfiddle.net/r2wjp6u8/
la source
Il n'y a donc aucun moyen de s'assurer à 100% qu'ils sélectionnent le même fichier, sauf si vous stockez chaque fichier et comparez-les par programme.
La façon dont vous interagissez avec les fichiers (ce que fait JS lorsque l'utilisateur «télécharge» un fichier) est HTML5 File API et JS FileReader .
https://www.html5rocks.com/en/tutorials/file/dndfiles/
https://scotch.io/tutorials/use-the-html5-file-api-to-work-with-files-locally-in-the-browser
Ces didacticiels vous montrent comment capturer et lire les métadonnées (stockées en tant qu'objet js) lorsqu'un fichier est téléchargé.
Créez une fonction qui déclenche «onChange» qui lira-> stockera-> comparera les métadonnées du fichier actuel aux fichiers précédents. Ensuite, vous pouvez déclencher votre événement lorsque le fichier souhaité est sélectionné.
la source
Croyez-moi, cela vous aidera certainement!
J'espère que cela aidera beaucoup d'entre vous.
la source