Mise à jour 2021
Bootstrap 5
L'entrée du fichier personnalisé n'existe plus, donc à modifier Choose file...
vous devrez utiliser JS ou un CSS comme celui-ci .
Bootstrap 4.4
L'affichage du nom de fichier sélectionné peut également être réalisé en JavaScript. Voici un exemple qui part du principe que l'entrée standard custom-file-input avec étiquette est l'élément frère suivant de l'entrée...
document.querySelector('.custom-file-input').addEventListener('change',function(e){
var fileName = document.getElementById("myInput").files[0].name;
var nextSibling = e.target.nextElementSibling
nextSibling.innerText = fileName
})
https://codeply.com/p/LtpNZllird
Bootstrap 4.1+.
Maintenant, dans Bootstrap 4.1, le texte de l'espace réservé "Choose file..." est défini dans le champ custom-file-label
:
<div class="custom-file" id="customFile" lang="es">
<input type="file" class="custom-file-input" id="exampleInputFile" aria-describedby="fileHelp">
<label class="custom-file-label" for="exampleInputFile">
Select file...
</label>
</div>
La modification du texte du bouton "Parcourir" nécessite un peu plus de CSS ou de SASS. Remarquez également comment travaux de traduction en langue en utilisant le lang=""
attribut.
.custom-file-input ~ .custom-file-label::after {
content: "Button Text";
}
https://codeply.com/go/gnVCj66Efp (CSS)
https://codeply.com/go/2Mo9OrokBQ (SASS)
Une autre option de Bootstrap 4.1
Vous pouvez également utiliser ceci plugin de saisie de fichiers personnalisés
https://www.codeply.com/go/uGJOpHUd8L/file-input
Bootstrap 4 Alpha 6 (Réponse originale)
Je pense qu'il y a deux problèmes distincts ici
<label class="custom-file" id="customFile">
<input type="file" class="custom-file-input">
<span class="custom-file-control form-control-file"></span>
</label>
1 - Comment modifier le texte initial de l'espace réservé et du bouton ?
Dans Bootstrap 4, l'élément initial La valeur de l'espace réservé est définie dans le custom-file-control
avec un pseudo CSS ::after
basé sur le langage HTML. Le bouton de fichier initial (qui n'est pas vraiment un bouton mais y ressemble) est défini par un pseudo élément CSS ::before
élément. Ces valeurs peuvent être remplacées par des CSS..
#customFile .custom-file-control:lang(en)::after {
content: "Select file...";
}
#customFile .custom-file-control:lang(en)::before {
content: "Click me";
}
2 - Comment obtenir la valeur du nom de fichier sélectionné, et mettre à jour l'entrée pour montrer la valeur.
Une fois qu'un fichier est sélectionné, la valeur peut être obtenue en utilisant JavaScript/jQuery.
$('.custom-file-input').on('change',function(){
var fileName = $(this).val();
})
Cependant, comme le texte de remplacement pour l'entrée est un pseudo-élément, il n'y a pas de moyen facile de manipuler ceci avec Js/jQuery . Vous pouvez toutefois disposer d'une autre classe CSS qui cache le pseudo contenu une fois que le fichier est sélectionné...
.custom-file-control.selected:lang(en)::after {
content: "" !important;
}
Utilisez jQuery pour faire basculer l'affichage de l'écran. .selected
sur le .custom-file-control
une fois que le fichier est sélectionné. Cela permettra de masquer la valeur initiale de l'espace réservé. Ensuite, mettez la valeur du nom de fichier dans le champ .form-control-file
span...
$('.custom-file-input').on('change',function(){
var fileName = $(this).val();
$(this).next('.form-control-file').addClass("selected").html(fileName);
})
Vous pouvez ensuite gérer le téléchargement ou la re-sélection des fichiers selon les besoins.
Démonstration sur Codeply (alpha 6)
0 votes
Cette question a déjà reçu une réponse ici : stackoverflow.com/questions/37713126/
0 votes
Pas vraiment, j'ai demandé comment changer le contenu de la propriété css, parce que c'est là que Bootstrap 4 a le texte est rendu dans cette approche. Je ne vois pas la valeur
0 votes
Mais je veux y accéder dynamiquement en fonction de la valeur de l'entrée. Comment puis-je faire cela avec css ?
0 votes
Tout d'abord, avez-vous réussi à modifier la valeur du placeholder/bouton avec CSS ? Le processus de sélection de la valeur a été répondu dans l'autre question.
0 votes
Je peux sélectionner la valeur avec JS, mais dans bootstrap 4 cette valeur 'placeholder' est dans ::after { content : "..." } et je dois changer cela pour voir les changements.