Modifier le texte par défaut dans le type d'entrée= "file"?

je veux changer le texte par défaut sur le bouton qui est " Choose File "quand nous utilisons input="file" .

enter image description here

Comment faire? Aussi comme vous pouvez voir dans le bouton image est sur le côté gauche du texte. Comment puis-je le mettre sur le côté droit du texte?

125
demandé sur Harry Joy 2011-02-28 08:58:50

14 réponses

chaque navigateur a son propre rendu de la commande et en tant que tel, vous ne pouvez pas changer le texte ou l'orientation de la commande.

il y a une sorte de" hacks "que vous pouvez essayer si vous voulez une solution / plutôt qu'une solution Flash ou .

http://www.quirksmode.org/dom/inputfile.html

http://www.shauninman.com/archive/2007/09/10/styling_file_inputs_with_css_and_the_dom

personnellement, parce que la plupart des utilisateurs s'en tiennent à leur navigateur de choix, et sont donc probablement habitués à voir le contrôle dans le rendu par défaut, ils seraient probablement confus s'ils voyaient quelque chose de différent (selon les types d'utilisateurs avec lesquels vous avez affaire).

37
répondu Shiv Kumar 2018-09-20 15:02:31

utiliser "for" attribut de label pour input .

<div>
  <label for="files" class="btn">Select Image</label>
  <input id="files" style="visibility:hidden;" type="file">
</div>
Ci-dessous est le code pour récupérer le nom du fichier téléchargé

$("#files").change(function() {
  filename = this.files[0].name
  console.log(filename);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>
      <label for="files" class="btn">Select Image</label>
      <input id="files" style="visibility:hidden;" type="file">
    </div>
98
répondu algometrix 2018-05-29 18:37:49

cela pourrait aider quelqu'un dans le futur, vous pouvez styliser l'étiquette pour l'entrée comme vous le souhaitez et mettre tout ce que vous voulez à l'intérieur et cacher l'entrée avec display none.

il fonctionne parfaitement sur cordova avec iOS

<link href="https://cdnjs.cloudflare.com/ajax/libs/ratchet/2.0.2/css/ratchet.css" rel="stylesheet"/>
<label for="imageUpload" class="btn btn-primary btn-block btn-outlined">Seleccionar imagenes</label>
<input type="file" id="imageUpload" accept="image/*" style="display: none">
18
répondu Paulo Mogollón 2016-11-05 22:31:45

je pense que c'est ce que vous voulez:

<!DOCTYPE html>
<html>

<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>JS Bin</title>
</head>

<body>
  <button style="display:block;width:120px; height:30px;" onclick="document.getElementById('getFile').click()">Your text here</button>
  <input type='file' id="getFile" style="display:none">
</body>

</html>
10
répondu 1Cr18Ni9 2017-10-24 11:10:19

ce n'est pas possible. Sinon, vous pourriez avoir besoin D'utiliser Silverlight ou Flash upload control.

7
répondu Anuraj 2011-02-28 06:01:05

ici comment vous pouvez le faire:



jQuery:

$(function() {
  $("#labelfile").click(function() {
    $("#imageupl").trigger('click');
  });
})

css

.file {
  position: absolute;
  clip: rect(0px, 0px, 0px, 0px);
  display: block;
}
.labelfile {
  color: #333;
  background-color: #fff;
  display: inline-block;
  margin-bottom: 0;
  font-weight: 400;
  text-align: center;
  vertical-align: middle;
  cursor: pointer;
  background-image: none;
  white-space: nowrap;
  padding: 6px 8px;
  font-size: 14px;
  line-height: 1.42857143;
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
}

code HTML:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div style="margin-top:4px;">
  <input name="imageupl" type="file" id="imageupl" class="file" />
  <label class="labelfile" id="labelfile"><i class="icon-download-alt"></i> Browse File</label>
</div>
3
répondu Tushar Shukla 2016-09-22 13:33:06

en utilisant Bootstrap vous pouvez faire cette chose comme ci-dessous le code.

<!DOCTYPE html>
<html lang="en">
<head>
<style>

.btn-file {
  position: relative;
  overflow: hidden;
}
.btn-file input[type=file] {
    position: absolute;
    top: 0;
    right: 0;
    min-width: 100%;
    min-height: 100%;
    font-size: 100px;
    text-align: right;
    filter: alpha(opacity=0);
    opacity: 0;
    outline: none;
    background: white;
    cursor: inherit;
    display: block;
}
</style>
  <title>Bootstrap Example</title>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
  <script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
</head>
<body>
  <span class="btn btn-file">Upload image from here<input type="file">
</body>
</html>
2
répondu Rana Aalamgeer 2016-09-22 12:31:47

j'ai fait un script et l'ai publié à github: get selectFile.js Facile à utiliser, n'hésitez pas à cloner.



HTML

<input type=file hidden id=choose name=choose>
<input type=button onClick=getFile.simulate() value=getFile>
<label id=selected>Nothing selected</label>



JS

var getFile = new selectFile;
getFile.targets('choose','selected');



Démo

jsfiddle.net/Thielicious/4oxmsy49/

2
répondu Thielicious 2017-06-10 14:06:51

mise à jour 2017:

j'ai fait des recherches sur la façon d'y parvenir. Et la meilleure explication/tutoriel est ici: https://tympanus.net/codrops/2015/09/15/styling-customizing-file-inputs-smart-way /

j'écrirai un résumé ici au cas où il ne serait pas disponible. Vous devriez donc avoir HTML:

<input type="file" name="file" id="file" class="inputfile" />
<label for="file">Choose a file</label>

puis masquer l'entrée avec CSS:

.inputfile {
width: 0.1px;
height: 0.1px;
opacity: 0;
overflow: hidden;
position: absolute;
z-index: -1;}

puis style l'étiquette:

.inputfile + label {
font-size: 1.25em;
font-weight: 700;
color: white;
background-color: black;
display: inline-block;
}

alors vous pouvez éventuellement ajouter JS pour afficher le nom du fichier:

var inputs = document.querySelectorAll( '.inputfile' );
Array.prototype.forEach.call( inputs, function( input )
{
var label    = input.nextElementSibling,
    labelVal = label.innerHTML;

input.addEventListener( 'change', function( e )
{
    var fileName = '';
    if( this.files && this.files.length > 1 )
        fileName = ( this.getAttribute( 'data-multiple-caption' ) || '' ).replace( '{count}', this.files.length );
    else
        fileName = e.target.value.split( '\' ).pop();

    if( fileName )
        label.querySelector( 'span' ).innerHTML = fileName;
    else
        label.innerHTML = labelVal;
});
});

mais vraiment il suffit de lire le tutoriel et télécharger la démo, il est vraiment bon.

2
répondu user3784950 2017-10-30 13:31:02

j'utiliserais un button pour déclencher le input :

<button onclick="document.getElementById('fileUpload').click()">Open from File...</button>
<input type="file" id="fileUpload" name="files" style="display:none" />

rapide et propre.

1
répondu Sony Santos 2017-07-28 17:45:42

Cela devrait fonctionner:

"151900920 d'entrée". className :: - webkit-file-upload-button { style de contenu.. }

0
répondu Andrius 2015-09-29 10:56:15

Permettez-moi d'ajouter un hack que j'ai utilisé. Je voulais avoir une section qui vous permet de glisser et déposer des fichiers, et je voulais que le glisser-déposer pour être cliquable avec l'original bouton de téléchargement.

Voici comment il ressemblait quand j'ai été fait (moins la capacité de glisser-déposer, Il ya beaucoup de tutoriels sur la façon de faire cela).

et puis j'ai réellement créé une série de billets de blog qui sont principalement sur les boutons de téléchargement de fichiers.

0
répondu Mr. Me 2016-04-08 01:52:08

Ok donc très simple CSS façon pure de créer votre fichier d'entrée personnalisé.

utilisez des étiquettes, mais comme vous le savez des réponses précédentes, étiquette n'invoque pas onclick fonction dans firefox, peut-être un bug, mais n'a pas d'importance avec le suivant.

<label for="file"  class="custom-file-input"><input type="file"  name="file" class="custom-file-input"></input></label>

Ce que vous faites est le style de l'étiquette de regarder la façon dont vous le voulez

    .custom-file-input {
        color: transparent;/* This is to take away the browser text for file uploading*/
        /* Carry on with the style you want */
        background: url(../img/doc-o.png);
        background-size: 100%;
        position: absolute;
        width: 200px;
        height: 200px;
        cursor: pointer;
        top: 10%;
        right: 15%;
    }

maintenant, masquez simplement le bouton d'entrée actuel, mais vous ne pouvez pas le définir à visability: hidden

donc rendez invisible en paramétrant opacity: 0;

input.custom-file-input {
    opacity: 0;
    position: absolute;/*set position to be exactly over your input*/
    left: 0;
    top: 0;
}

maintenant, comme vous avez peut-être remarqué que j'ai la même classe sur mon étiquette que je fais mon champ d'entrée, c'est parce que je veux que les deux aient le même style, donc où que vous cliquiez sur l'étiquette, vous cliquez en fait sur le champ d'entrée invisible.

0
répondu Jadin Hornsby 2016-09-29 08:43:43

vous pouvez utiliser cette approche, elle fonctionne même si beaucoup de fichiers sont entrés.

const fileBlocks = document.querySelectorAll('.file-block')
const buttons = document.querySelectorAll('.btn-select-file')

;[...buttons].forEach(function (btn) {
  btn.onclick = function () {
    btn.parentElement.querySelector('input[type="file"]').click()
  }
})

;[...fileBlocks].forEach(function (block) {
  block.querySelector('input[type="file"]').onchange = function () {
    const filename = this.files[0].name

    block.querySelector('.btn-select-file').textContent = 'File selected: ' + filename
  }
})
.btn-select-file {
  border-radius: 20px;
}

input[type="file"] {
  display: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="file-block">
  <button class="btn-select-file">Select Image 1</button>
  <input type="file">
</div>
<br>
<div class="file-block">
  <button class="btn-select-file">Select Image 2</button>
  <input type="file">
</div>
0
répondu Илья Зеленько 2018-09-18 09:59:02