192 votes

type d'entrée = bouton afficher uniquement le fichier

Est-il un moyen de style (ou le script) <input type=file /> élément visible uniquement bouton "Parcourir" sans champ de texte?

Merci

Edit: Juste pour préciser pourquoi j'ai besoin de cette. Je suis en utilisant le multi upload de fichier de code à partir de http://www.morningz.com/?p=5 et il n'a pas besoin champ de saisie de texte, car il n'a jamais de valeur. Le Script ajoute juste nouvellement sélectionné le fichier de collection sur la page. Il serait beaucoup mieux sans champ de texte, si c'est possible.

236voto

shiba Points 261
 <input type="file" id="selectedFile" style="display: none;" />
<input type="button" value="Browse..." onclick="document.getElementById('selectedFile').click();" />
 

Cela fonctionnera sûrement, je l'ai utilisé dans mes projets. J'espère que cela aide :)

84voto

ampersandre Points 1089

J'ai eu un diable de temps à essayer de l'accomplir. Je ne voulais pas utiliser une solution Flash, et aucun des bibliothèques jQuery j'ai regardé étaient fiables sur tous les navigateurs.

Je suis venu avec ma propre solution, qui est mis en œuvre entièrement en CSS (sauf pour le onclick changement de style pour afficher le bouton 'cliqué').

Vous pouvez essayer un exemple ici: http://jsfiddle.net/VQJ9V/307/ (Testé dans FF 7, IE 9, Safari 5, Opera 11 et Chrome 14)

Il fonctionne en créant un grand fichier en entrée (avec font-size:50px), puis en l'enveloppant dans un div qui a une taille fixe et overflow:hidden. L'entrée est alors visible uniquement par le biais de cette "fenêtre" div. La div ne peut être donnée une image d'arrière-plan ou la couleur, le texte peut être ajouté, et l'entrée peut être rendu transparent pour révéler la div arrière-plan:

HTML:

<div class="inputWrapper">
    <input class="fileInput" type="file" name="file1"/>
</div>

CSS:

.inputWrapper {
    height: 32px;
    width: 64px;
    overflow: hidden;
    position: relative;
    cursor: pointer;
    /*Using a background color, but you can use a background image to represent a button*/
    background-color: #DDF;
}
.fileInput {
    cursor: pointer;
    height: 100%;
    position:absolute;
    top: 0;
    right: 0;
    z-index: 99;
    /*This makes the button huge. If you want a bigger button, increase the font size*/
    font-size:50px;
    /*Opacity settings for all browsers*/
    opacity: 0;
    -moz-opacity: 0;
    filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0)
}

Laissez-moi savoir si il ya des problèmes avec elle et je vais essayer de les réparer.

53voto

tmanthey Points 1887

J'ai perdu ma journée d'aujourd'hui se présente au travail. Je n'en trouve pas de solutions ici de travail de chacun de mes scénarios.

Puis je me suis souvenu, j'ai vu un exemple pour le JQuery File Upload sans zone de texte. Donc, ce que j'ai fait c'est que j'ai pris l'exemple de leur vie et dépouillé vers le bas à la partie.

Cette solution, au moins, fonctionne pour IE et FF, et peut être entièrement de style. Dans l'exemple ci-dessous le fichier d'entrée est cachée par la fantaisie "Ajouter des Fichiers" bouton.

<html>

<head>
    <title>jQuery File Upload Example</title>
    <style type="text/css">
        .myfileupload-buttonbar input
        {
            position: absolute;
            top: 0;
            right: 0;
            margin: 0;
            border: solid transparent;
            border-width: 0 0 100px 200px;
            opacity: 0.0;
            filter: alpha(opacity=0);
            -o-transform: translate(250px, -50px) scale(1);
            -moz-transform: translate(-300px, 0) scale(4);
            direction: ltr;
            cursor: pointer;
        }
        .myui-button
        {
            position: relative;
            cursor: pointer;
            text-align: center;
            overflow: visible;
            background-color: red;
            overflow: hidden;
        }
    </style>
</head>
<body>
    <div id="fileupload" >
        <div class="myfileupload-buttonbar ">
            <label class="myui-button">
                <span >Add Files</span>
                <input id="file" type="file" name="files[]" />
            </label>
        </div>
    </div>
</body>
</html>

25voto

jojo Points 121

Cachez l'élément de fichier d'entrée et créez un bouton visible qui déclenchera l'événement click de ce fichier d'entrée.

Essaye ça:

CSS

 #file { width:0; height:0; } 
 

HTML:

 <input type='file' id='file' name='file' />
<button id='btn-upload'>Upload</button>
 

JAVASCRIPT (jQuery):

 $(function(){
    $('#btn-upload').click(function(e){
        e.preventDefault();
        $('#file').click();}
    );
});
 

17voto

Erik van Brakel Points 7589

Cela va être très dur. Le problème avec le fichier input type est qu'il est généralement constitué de deux éléments visuels, tout en étant traités comme un seul DOM-élément. Ajoutez à cela que plusieurs navigateurs ont leur propre look et la sensation pour le fichier d'entrée, et vous serez en mesure de cauchemar. Voir cet article sur quirksmode.org sur les bizarreries du fichier d'entrée. Je vous garantie qu'il ne sera pas vous rendre heureux (je parle d'expérience).

[MODIFIER]

En fait, je pense que vous pourriez sortir avec la mise de votre entrée dans un élément conteneur (comme un div), et l'ajout d'une marge négative de l'élément. Masquant la zone de texte de la partie hors de l'écran. Une autre option serait d'utiliser la technique dans l'article que j'ai lié, pour tenter de style comme un bouton.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X