330 votes

Comment changer le texte du bouton de <input type="file" /> ?

<input type="file" value="Browse" name="avatar" id="id_avatar" />

J'ai essayé de modifier le value mais ça ne marche pas. Comment personnaliser le texte du bouton ?

0 votes

Parlez-vous du nom de fichier ou du texte du bouton ?

0 votes

0 votes

148voto

Fernando Kosh Points 729

Utilisez Style de fichier Bootstrap qui est utilisé pour styliser les champs de fichier des formulaires. Il s'agit d'un plugin pour une bibliothèque de composants basée sur jQuery appelée Twitter Bootstrap.

Exemple d'utilisation :

Inclure :

<script type="text/javascript" src="js/bootstrap-filestyle.min.js"> </script>

Via JavaScript :

$(":file").filestyle();

Via les attributs de données :

<input type="file" class="filestyle" data-classButton="btn btn-primary" data-input="false" data-classIcon="icon-plus" data-buttonText="Your label here.">

2 votes

Ça n'a pas l'air de fonctionner pour moi. Il affiche toujours les boutons par défaut du briseur. De plus, la démo à github.com/markusslima/bootstrap-filestyle.git ne fonctionne pas non plus - tous les exemples montrent les boutons par défaut. Est-ce que quelque chose m'échappe ?

8 votes

@Tony Uhh.... qu'est-ce qui vous fait penser que Bootstrap n'utilise pas le "wacky <img/> hack" en dessous aussi ? :-)

0 votes

@Ya pouvez-vous dire quel navigateur et sa version ? Testé maintenant sur Chrome Version 43.0.2357.130 (64-bit) sur Linux et tous les exemples fonctionnent parfaitement.

124voto

ParPar Points 1584

Vous pouvez mettre une image à la place, et faire comme ceci :

HTML :

<img src="/images/uploadButton.png" id="upfile1" style="cursor:pointer" />
<input type="file" id="file1"  name="file1" style="display:none" />

JQuery :

$("#upfile1").click(function () {
    $("#file1").trigger('click');
});

CAVEAT : Dans IE9 et IE10 si vous déclenchez le onClick dans une entrée de fichier via javascript, le formulaire sera signalé comme 'dangereux' et ne pourra pas être soumis avec javascript, pas sûr qu'il puisse être soumis traditionnellement.

6 votes

C'est une solution intelligente. Ne pourriez-vous pas également le faire avec un élément <button> ?

1 votes

@Code Commander -Merci, et oui, vous pouvez le faire avec tous les éléments que vous voulez, mais le plus courant est l'élément <image>. Il suffit de se débarrasser du bouton+champ de texte de la "file input"...

2 votes

Juste un avertissement à tous ceux qui utilisent le système ci-dessus, certains navigateurs mobiles désactivent le déclenchement des clics de saisie de fichiers par programmation. Plus précisément, Android 4 pour le Galaxy S III

50voto

Pekka 웃 Points 249607

Le texte "upload file..." est prédéfini par le navigateur et ne peut pas être modifié. La seule façon de contourner ce problème est d'utiliser un composant de téléchargement basé sur Flash ou Java, tel que swfupload .

6 votes

Pouvez-vous prouver qu'il ne peut pas être changé ?

1 votes

Ou en parcourant les codes sources des navigateurs, au moins pour les navigateurs Open Source.

0 votes

Il pourrait s'agir de la réponse à une autre question, du type "Pourquoi le contenu de la valeur 'VALUE=" ? C:\someFile.txt "' pour un champ de saisie de type fichier, 'TYPE="FILE"', ignoré par le navigateur ?") : stackoverflow.com/questions/1342039

2voto

Asaph Points 56989

EDIT : Je vois maintenant par les commentaires que vous demandez le texte du bouton, et non le chemin du fichier. C'est ma faute. Je vais laisser ma réponse originale ci-dessous au cas où quelqu'un d'autre qui tomberait sur cette question l'interpréterait de la même façon que moi.

2e EDIT : J'avais supprimé cette réponse car j'ai décidé que j'avais mal compris la question et que ma réponse n'était pas pertinente. Cependant, les commentaires dans une autre réponse ont indiqué que les gens voulaient toujours voir cette réponse, alors je la supprime.

MA RÉPONSE ORIGINALE (Je pensais que l'OP demandait le chemin, pas le texte du bouton) :

Cette fonction n'est pas prise en charge pour des raisons de sécurité . Le navigateur Opera prenait en charge cette fonctionnalité, mais elle a été supprimée. Pensez à ce qui serait possible si cette fonction était prise en charge ; vous pourriez créer une page avec une entrée de téléchargement de fichier, la pré-remplir avec un chemin d'accès à un fichier sensible, puis soumettre automatiquement le formulaire en utilisant le javascript déclenché par la balise onload événement. Cela se produirait trop rapidement pour que l'utilisateur puisse faire quoi que ce soit.

1voto

  1. Avant cela <input type="file"> ajouter une image et <input style="position:absolute"> il occupera l'espace de <input type="file">
  2. Utilisez le CSS suivant pour l'élément fichier

    position:relative;  
    opacity:0;  
    z-index:99;

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