J'ai besoin d'une solution pour afficher la boîte de dialogue d'ouverture de fichier en HTML tout en cliquant sur un fichier div
. La boîte de dialogue d'ouverture de fichier doit s'ouvrir lorsque l'utilisateur div
clique sur.
Je ne souhaite pas afficher la zone du fichier d'entrée dans le cadre d'une page HTML. Il doit être affiché dans une boîte de dialogue séparée, qui ne fait pas partie de la page Web.
javascript
file
dialog
Arche
la source
la source
Réponses:
En voici une belle
Démo Fine Uploader
C'est un
<input type='file' />
contrôle en soi. Mais un div est placé dessus et des styles css sont appliqués pour obtenir cette sensation. L'opacité du contrôle de fichier est définie sur 0 pour qu'il apparaisse que la fenêtre de dialogue s'ouvre en cliquant sur le div.la source
pour IE, ajoutez ceci:
la source
document.getElementById("logo").click()
c'est suffisant. Ils montrent également une autre façon "Drag & Drop". developer.mozilla.org/en-US/docs/Web/API/File/…Je ne sais pas pourquoi personne ne l'a signalé, mais voici un moyen de le faire sans Javascript et il est également compatible avec n'importe quel navigateur.
EDIT: Dans Safari, le
input
est désactivé lorsqu'il est masqué avecdisplay: none
. Une meilleure approche serait d'utiliserposition: fixed; top: -100em
.Si vous préférez, vous pouvez aller dans le "bon sens" en utilisant
for
dans lelabel
pointant versid
l'entrée comme ceci:la source
<input>
balise doit avoir unname
attribut; 2. si l'for
attribut est spécifié,<input>
la balise de fichier nécessitera unid
.Simplicity is the ultimate sophistication
display: none
sont désactivées. La solution de contournement utilise une approche différente pour masquer l'entrée. Je mettrai à jour la réponse pour refléter cela.En fait, vous n'avez pas besoin de tout cela avec l'opacité, la visibilité, le
<input>
style, etc. Jetez un coup d'œil:Démo sur jsFiddle . Testé dans Chrome 30.0 et Firefox 24.0. Cela ne fonctionnait pas dans Opera 12.16, cependant.
la source
C'est ce qui a le mieux fonctionné pour moi (testé sur IE8, FF, Chrome, Safari).
Explication: J'ai positionné l'entrée de fichier directement au-dessus de l'élément sur lequel cliquer, de sorte que tout clic atterrirait soit sur celui-ci, soit sur son étiquette (ce qui fait apparaître la boîte de dialogue de téléchargement comme si vous aviez cliqué sur l'étiquette elle-même). J'ai eu quelques problèmes avec la partie bouton de l'entrée par défaut qui sortait du côté de l'étiquette, donc
overflow: hidden
sur l'entrée etdisplay: inline-block
sur l'étiquette étaient nécessaires.la source
Que faire si javascript est désactivé sur la machine des clients? Utilisez la solution suivante pour tous les scénarios. Vous n'avez même pas besoin de javascript / jQuery. :
HTML
CSS
Explication:
for="Your input Id"
. Déclenche l'événement de clic par défaut par HTML. Donc, il déclenche par défaut l'événement de clic, pas besoin de jQuery / javascript. Si c'est simplement fait par HTML, pourquoi utiliser jQuery / jScript? Et vous ne pouvez pas dire si le client a désactivé JS. Votre fonctionnalité devrait fonctionner même si JS est désactivé.JsFiddle de travail (vous n'avez pas besoin de JS, jquery)
la source
Ajoutez d'abord les balises head :
si vous avez déjà des balises de script , ajoutez simplement ces fonctions ci-dessus.
Dans votre corps ou votre formulaire, ajoutez des balises:
Peu importe où dans votre html, c'est comme si vous avez créé une nouvelle instance de type classe OpenFileDialog en tant que variable globale , dont le nom est l' id de l'élément, peu importe où dans votre code ou xaml, mais dans votre script ou code , vous ne pouvez pas taper son nom, puis lire une propriété ou appeler une fonction, car il existe des fonctions globales qui font celles qui ne sont pas définies dans l'élément input type = "file". Il vous suffit de donner à ces fonctions l'identifiant de l'entrée masquée type = "file" qui est le nom de l'instance OpenFileDialog sous forme de chaîne.
Pour vous faciliter la vie dans la création d'instances de dialogues de fichiers ouverts dans votre html, vous pouvez créer une fonction qui le fait:
et si vous souhaitez supprimer la boîte de dialogue de fichier ouvert, vous pouvez créer et utiliser la fonction suivante:
mais avant de supprimer la boîte de dialogue d'ouverture de fichier, assurez-vous qu'elle existe en créant et en utilisant la fonction suivante:
et si vous ne voulez pas créer et ajouter les boîtes de dialogue de fichier ouvert dans le corps ou les balises de formulaire dans le html, car il s'agit d'ajouter des entrées masquées type = "file" s, vous pouvez le faire dans le script en utilisant la fonction de création ci-dessus :
Assurez-vous que près de votre corps ou des balises de formulaire, vous avez ajouté:
Vous n'avez pas à faire cette ligne ci-dessus, si vous l'avez déjà fait.
CONSEIL: Vous pouvez ajouter à votre projet ou site Web un nouveau fichier JScript, si vous ne l'avez pas encore fait, et dans ce fichier, vous pouvez mettre toutes les fonctions de dialogue de fichier ouvert à l'écart des balises de script et de la page HTML ou du formulaire Web, et utiliser les dans votre page de formulaire html ou Web à partir de ce fichier JScript, mais n'oubliez pas avant de lier la page de formulaire html ou Web au fichier JScript bien sûr. Vous pouvez le faire simplement en faisant glisser le fichier JScript sur votre page html dans la têteMots clés. Si votre page est un formulaire Web et non un simple HTML, et que vous n'avez pas de balises head, placez-la n'importe où pour qu'elle fonctionne. N'oubliez pas de définir la variable globale dans ce fichier JScript, dont la valeur sera votre corps ou l'identifiant de formulaire sous forme de chaîne. Après avoir lié le fichier JScript à votre page de formulaire html ou Web, vous pouvez charger l'événement de votre corps de formulaire, définir la valeur de cette variable sur votre corps ou votre identifiant de formulaire. Ensuite, dans le fichier JScript, vous n'avez plus à donner au document l'identifiant du corps ou de la forme d'une page, donnez-lui simplement la valeur de cette variable. Vous pouvez appeler cette variable bodyId ou formId ou bodyOrFormId ou tout autre nom de votre choix .
Bonne chance, mec!
la source
Le moyen le plus simple:
Ce qui est important, l'utilisation de
display: none
garantit qu'aucune place ne sera occupée par l'entrée de fichier caché (ce qui se passe avecopacity: 0
).la source
AFAIK vous avez toujours besoin d'un
<input type="file">
élément, alors vous pouvez utiliser certains des éléments de quirksmode pour le styliserla source
Le seul sans
<input type="file">
est en incorporant une animation flash transparente sur le div. Vous pouvez ensuite utiliser un événement de clic généré par l'utilisateur (conforme aux nouvelles règles de sécurité de Flash 10) pour déclencher un appel à FileReference.browse de flash .Il offre une dépendance supplémentaire sur la manière quirksmode mais en retour, vous obtenez beaucoup plus d'événements (tels que des événements de progression intégrés).
la source
Peut utiliser
la source