Je voudrais déclencher un événement de clic sur une <input type="file">
balise par programme.
Le simple fait d'appeler click () ne semble pas faire quoi que ce soit ou du moins cela ne fait pas apparaître une boîte de dialogue de sélection de fichier.
J'ai essayé de capturer des événements à l'aide d'écouteurs et de rediriger l'événement, mais je n'ai pas pu obtenir cela pour réellement exécuter l'événement comme si quelqu'un cliquait dessus.
javascript
html
user28655
la source
la source
Réponses:
Vous ne pouvez pas le faire dans tous les navigateurs, soi - disant IE ne permet, mais Mozilla et Opera ne sont pas.
Lorsque vous composez un message dans GMail, la fonctionnalité «joindre des fichiers» est implémentée d'une manière pour IE et tout navigateur qui prend en charge cela, puis implémentée d'une autre manière pour Firefox et les navigateurs qui ne le font pas.
Je ne sais pas pourquoi vous ne pouvez pas le faire, mais une chose qui constitue un risque pour la sécurité et que vous n'êtes pas autorisé à faire dans un navigateur, est de définir par programme le nom de fichier sur l'élément HTML File.
la source
input
élément de fichier est visible. Le déclenchement de laclick
méthode fonctionne, y compris dans la console, si l'élément est visible.Je cherchais une solution à toute cette journée. Et ce sont les conclusions que j'ai faites:
J'espère que cela t'aides! :)
la source
Vous pouvez déclencher click () sur n'importe quel navigateur, mais certains navigateurs ont besoin que l'élément soit visible et ciblé. Voici un exemple jQuery:
Cela fonctionne avec le masquer avant le
click()
mais je ne sais pas si cela fonctionne sans appeler la méthode show. Je n'ai jamais essayé ça sur Opera, j'ai testé sur IE / FF / Safari / Chrome et ça marche. J'espère que cela vous aidera.la source
$(...).show().focus().click().hide();
:)C'EST POSSIBLE: Sous FF4 +, Opera?, Chrome: mais:
inputElement.click()
devrait être appelé à partir du contexte d'action de l'utilisateur! (pas le contexte d'exécution de script)<input type="file" />
devrait être visible (inputElement.style.display !== 'none'
) (vous pouvez le masquer avec la visibilité ou autre chose, mais pas la propriété "display")la source
onclick
attribut au lieu de lier à l'événement.inputElement.click()
partir d'un événement keydown (raccourci pour joindre un fichier) fonctionnait, mais l'appel dans un délai d'attente ou un rappel ajax n'a PAS fonctionné. A voté.this
. : /Pour ceux qui comprennent que vous devez superposer un formulaire invisible sur le lien, mais sont trop paresseux pour écrire, je l'ai écrit pour vous. Eh bien, pour moi, mais autant partager. Les commentaires sont les bienvenus.
HTML (quelque part):
HTML (Quelque part où vous ne vous souciez pas):
JavaScript:
la source
Essayez cette solution: http://code.google.com/p/upload-at-click/
la source
utilisez simplement une balise d'étiquette, de cette façon, vous pouvez masquer l'entrée et la faire fonctionner via son étiquette associée https://developer.mozilla.org/fr/docs/Web/HTML/Element/Label
la source
Si vous souhaitez que la
click
méthode fonctionne sur Chrome, Firefox, etc., appliquez le style suivant à votre fichier d'entrée. Il sera parfaitement caché, c'est comme si vous faisiez undisplay: none;
C'est aussi simple que ça, j'ai testé ça marche!
la source
height
etwidth
le0
?A fonctionné pour moi quand j'ai rencontré un problème similaire, c'est un eRube Goldberg régulier.
la source
Permettez-moi d'ajouter à cet ancien article, une solution de travail que j'utilisais et qui fonctionne probablement dans 80% ou plus de tous les navigateurs, nouveaux et anciens.
La solution est complexe mais simple. La première étape consiste à utiliser CSS et à deviner le type de fichier d'entrée avec des "sous-éléments" qui transparaissent car il a une opacité de 0. L'étape suivante consiste à utiliser JavaScript pour mettre à jour son étiquette selon les besoins.
Exemple de jsFiddle de travail
la source
Ça marche :
Pour des raisons de sécurité sur Firefox et Opera, vous ne pouvez pas déclencher le clic sur l'entrée de fichier, mais vous pouvez simuler avec MouseEvents:
la source
createEvent()
etinitMouseEvent()
sont désormais obsolètes.Je sais que c'est vieux, et toutes ces solutions sont des hacks autour des précautions de sécurité du navigateur avec une valeur réelle.
Cela dit, à partir d'aujourd'hui, fileInput.click () fonctionne dans Chrome actuel (36.0.1985.125 m) et Firefox ESR actuel (24.7.0), mais pas dans IE actuel (11.0.9600.17207). La superposition d'un champ de fichier avec l'opacité 0 au-dessus d'un bouton fonctionne, mais je voulais un élément de lien comme déclencheur visible, et le soulignement du survol ne fonctionne pas tout à fait dans n'importe quel navigateur. Il clignote puis disparaît, probablement le navigateur réfléchissant si le style de vol stationnaire s'applique réellement ou non.
Mais j'ai trouvé une solution qui fonctionne dans tous ces navigateurs. Je ne prétendrai pas avoir testé chaque version de chaque navigateur, ou que je sais qu'il continuera de fonctionner pour toujours, mais il semble répondre à mes besoins maintenant.
C'est simple: positionnez le champ de saisie de fichier hors écran (position: absolu; haut: -5000 pixels), placez un élément d'étiquette autour de lui et déclenchez le clic sur l'étiquette, au lieu du champ de fichier lui-même.
Notez que le lien doit être scripté pour appeler la méthode click de l'étiquette, il ne le fait pas automatiquement, comme lorsque vous cliquez sur du texte à l'intérieur d'un élément d'étiquette. Apparemment, l'élément de lien capture le clic, et il ne parvient pas à l'étiquette.
Notez également que cela ne permet pas d'afficher le fichier actuellement sélectionné, car le champ est hors écran. Je voulais soumettre immédiatement lorsqu'un fichier a été sélectionné, donc ce n'est pas un problème pour moi, mais vous aurez besoin d'une approche quelque peu différente si votre situation est différente.
la source
JS Fiddle: http://jsfiddle.net/eyedean/1bw357kw/
la source
Ce code fonctionne pour moi. C'est ce que vous essayez de faire?
la source
Ma solution pour Safari avec jQuery et jQuery-ui:
la source
Voici une solution JavaScript pure à ce problème. Fonctionne bien sur tous les navigateurs
la source
Il existe des moyens de rediriger les événements vers le contrôle, mais ne vous attendez pas à pouvoir facilement déclencher des événements vers le contrôle incendie, car les navigateurs essaieront de bloquer cela pour de (bonnes) raisons de sécurité.
Si vous avez seulement besoin que la boîte de dialogue de fichier apparaisse lorsqu'un utilisateur clique sur quelque chose, disons parce que vous voulez des boutons de téléchargement de fichiers plus beaux, alors vous voudrez peut-être jeter un œil à ce que Shaun Inman a proposé .
J'ai réussi à déclencher le clavier avec un décalage créatif de la mise au point dans et hors du contrôle entre les événements keydown, keypress et keyup. YMMV.
Mon conseil sincère est de laisser cela tranquille, car c'est un monde de navigateur-incompatibilité-douleur. Les mises à jour mineures du navigateur peuvent également bloquer les astuces sans avertissement et vous devrez peut-être continuer à réinventer les hacks pour que cela fonctionne.
la source
Je faisais des recherches sur ce sujet il y a quelque temps car je voulais créer un bouton personnalisé qui ouvrirait la boîte de dialogue de fichier et commencerait le téléchargement immédiatement. Je viens de remarquer quelque chose qui pourrait rendre cela possible - Firefox semble ouvrir la boîte de dialogue lorsque vous cliquez n'importe où sur le téléchargement. Donc, ce qui suit pourrait le faire:
Ce n'est que théorique puisque j'ai déjà utilisé une autre méthode pour résoudre le problème, mais cela pourrait bien fonctionner.
la source
J'avais une
<input type="button">
étiquette cachée. J'ai attaché l'"onClick"
événement à n'importe quel composant visible de n'importe quel type, comme une étiquette. Cela a été fait en utilisant soit les outils de développement de Google Chrome, soit le Firebug de Mozilla Firefox en utilisant la commande "edit HTML" du clic droit. Dans ce cas, spécifiez le script suivant ou quelque chose de similaire:Si vous avez JQuery:
si non:
Merci.
la source
Hé, cette solution fonctionne. pour le téléchargement, nous devrions utiliser MSBLOB
Pour AngularJS ou même pour javascript normal.
la source
Cela sera désormais possible dans Firefox 4, avec la mise en garde qu'elle compte comme une fenêtre pop-up et sera donc bloquée chaque fois qu'une fenêtre pop-up aurait été.
la source
Voici une solution qui fonctionne pour moi: CSS:
HTML avec "petite" aide JQuery:
Assurez-vous simplement que maskfied est complètement couvert par un vrai champ de téléchargement.
la source
Vous pouvez le faire selon la réponse de la boîte de dialogue Ouvrir un fichier sur la balise <a>
la source
J'ai trouvé que si l'entrée (fichier) est en dehors du formulaire, le déclenchement de l'événement click invoque la boîte de dialogue du fichier.
la source
J'espère que cela aide quelqu'un - j'ai passé 2 heures à me cogner la tête:
Dans IE8 ou IE9, si vous déclenchez l'ouverture d'une entrée de fichier avec javascript de quelque façon que ce soit (croyez-moi, je les ai tous essayés), cela ne vous permettra pas de soumettre le formulaire en utilisant javascript, il échouera silencieusement.
L'envoi du formulaire via un bouton d'envoi normal peut fonctionner mais en appelant form.submit (); échouera silencieusement.
J'ai dû recourir à la superposition de mon bouton de sélection de fichier avec une entrée de fichier transparente qui fonctionne.
la source
Cela a fonctionné pour moi:
la source
ce n'est pas impossible:
Mais d'une manière ou d'une autre, cela ne fonctionne que si c'est dans une fonction qui a été appelée via un événement click.
Vous pouvez donc avoir la configuration suivante:
html:
JavaScript:
la source
createEvent()
etinitMouseEvent()
ont été dépréciés. Vous devez utiliser unCustomEvent()
maintenant ...Vous pouvez utiliser
la source