J'ai un élément d'entrée de fichier caché. Est-il possible de déclencher sa boîte de dialogue de sélection de fichier à partir d'un événement de clic sur un bouton?
javascript
jquery
html
tamakisquare
la source
la source
click()
unedisplay:none
entrée et cela a fonctionnéclick()
sur un élément avec desdisplay: none
oeuvres! ;) Comment les choses ont changé au cours des quatre dernières années.hidden
attribut à la placestyle="visibility:hidden"
:<input id="myInput" type="file" hidden>
( w3schools.com/tags/att_global_hidden.asp )La plupart des réponses ici manquent d'informations utiles:
Oui, vous pouvez cliquer par programme sur l'élément d'entrée à l'aide de jQuery / JavaScript, mais uniquement si vous le faites dans un gestionnaire d'événements appartenant à un événement QUI A ÉTÉ DÉMARRÉ PAR L'UTILISATEUR!
Ainsi, par exemple, rien ne se passera si vous, le script, cliquez par programme sur le bouton dans un rappel ajax, mais si vous mettez la même ligne de code dans un gestionnaire d'événements qui a été déclenché par l'utilisateur, cela fonctionnera.
PS Le
debugger;
mot-clé perturbe la fenêtre de navigation si c'est avant le clic programmatique ... au moins en chrome 33 ...la source
$(staticElementParent).on("click", "dynamicChild", function(){})
debugger;
mot - clé ne perturbe plus le clic programmatiquePour mémoire, il existe une solution alternative qui ne nécessite pas de Javascript. C'est un peu un hack, exploitant le fait que cliquer sur une étiquette met l'accent sur l'entrée associée.
Vous avez besoin d'un
<label>
avec unfor
attribut approprié (pointe vers l'entrée), optionnellement stylé comme un bouton (avec bootstrap, utilisezbtn btn-default
). Lorsque l'utilisateur clique sur l'étiquette, la boîte de dialogue s'ouvre, exemple:la source
Je ne sais pas comment les navigateurs gèrent les clics sur les
type="file"
éléments (problèmes de sécurité et tout), mais cela devrait fonctionner:J'ai testé ce JSFiddle dans Chrome, Firefox et Opera et ils affichent tous la boîte de dialogue de navigation de fichiers.
la source
hover
événement: jsfiddle.net/UQfaZ/1J'emballe le
input[type=file]
dans une étiquette d'étiquette, puis je le styliselabel
à votre guise et masque leinput
.Solution purement CSS.
la source
<input type="file" hidden>
pour supprimer le besoin d'appliquer un style CSS.Nativement, le seul moyen est de créer un
<input type="file">
élément puis de simuler un clic, malheureusement.Il y a un petit plugin (plug sans vergogne) qui vous évitera d'avoir à faire cela tout le temps: file-dialog
la source
La meilleure solution, fonctionne dans tous les navigateurs .. même sur mobile.
Le masquage du type de fichier d'entrée pose des problèmes avec les navigateurs, l'opacité est la meilleure solution car elle ne se cache pas, mais ne s'affiche pas. :)
la source
visibility:hidden
devrait être un meilleur choix.visibility: hidden
affecte toujours la mise en page.display: none
est ce que vous voulez.Il n'y a pas de moyen de le faire entre navigateurs, pour des raisons de sécurité. Ce que les gens font généralement, c'est superposer le fichier d'entrée sur quelque chose d'autre et définir sa visibilité sur masqué afin qu'il soit déclenché par lui-même. Plus d'infos ici.
la source
<input type="file">
, non<select>
.$.click()
.Assurez-vous que vous utilisez la liaison pour obtenir les accessoires de composant dans REACT
la source
En utilisant jQuery, vous pouvez appeler
click()
pour simuler un clic.la source
Cela a fonctionné pour moi:
la source
Pour ceux qui veulent la même chose mais utilisent React
la source
la source