bootstrap 4 file input doesn't show the file name

I have a problem with the custom-file-input class in Bootstrap 4. after I chose which file I want to upload the filename do not show.

I use this code:

<div class="input-group mb-3">
<div class="custom-file">
<input type="file" class="custom-file-input" id="inputGroupFile02">
<label class="custom-file-label" for="inputGroupFile02">Choose file</label>
</div>
<div class="input-group-append">
<button class="btn btn-primary">Upload</button>
</div>
</div>

Any idea how I can fix it without getting too complicated?

146293 次浏览

您需要使用 javascript 来显示所选文件的名称,如文档中所写: https://getbootstrap.com/docs/4.5/components/forms/#file-browser

Here you can find the solution: 引导程序4文件输入

That's the code for your example:

<html lang="en">
<head>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/css/bootstrap.min.css" integrity="sha384-rwoIResjU2yc3z8GV/NPeZWAv56rSmLldC3R/AZzGRnGxQQKnKkoFVhFQhNUwEyJ" crossorigin="anonymous">
<script src="https://code.jquery.com/jquery-3.1.1.slim.min.js" integrity="sha384-A7FZj7v+d/sdmMqp/nOQwliLvUsJfDHW+k9Omg/a/EheAdgtzNs3hpfag6Ed950n" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/tether/1.4.0/js/tether.min.js" integrity="sha384-DztdAPBWPRXSA/3eYEEUWrWCy7G5KFbe8fFjk5JAIxUYHKkDx6Qin1DkWx51bBrb" crossorigin="anonymous"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/js/bootstrap.min.js" integrity="sha384-vBWWzlZJ8ea9aCX4pEW3rVHjgjt7zpkNpZk+02D9phzyeVkE+jo0ieGizqPLForn" crossorigin="anonymous"></script>
</head>
<body>
<div class="input-group mb-3">
<div class="custom-file">
<input type="file" class="custom-file-input" id="inputGroupFile02"/>
<label class="custom-file-label" for="inputGroupFile02">Choose file</label>
</div>
<div class="input-group-append">
<button class="btn btn-primary">Upload</button>
</div>
</div>
<script>
$('#inputGroupFile02').on('change',function(){
//get the file name
var fileName = $(this).val();
//replace the "Choose a file" label
$(this).next('.custom-file-label').html(fileName);
})
</script>
</body>
</html>

我用以下同样的方法:

<script type="application/javascript">
$('input[type="file"]').change(function(e){
var fileName = e.target.files[0].name;
$('.custom-file-label').html(fileName);
});
</script>

Anuja Patil 的答案只适用于页面上的单个文件输入。如果有不止一个,这个方法就可以工作。如果启用 multiple,此代码片段还将显示所有文件。

<script type="text/javascript">


$('.custom-file input').change(function (e) {
var files = [];
for (var i = 0; i < $(this)[0].files.length; i++) {
files.push($(this)[0].files[i].name);
}
$(this).next('.custom-file-label').html(files.join(', '));
});


</script>

请注意,$(this).next('.custom-file-label').html($(this)[0].files.join(', '));不工作。这就是为什么需要 for循环。

如果您从不在文件上传中处理多个文件,那么可以使用这个简单的代码片段。

<script type="text/javascript">


$('.custom-file input').change(function (e) {
if (e.target.files.length) {
$(this).next('.custom-file-label').html(e.target.files[0].name);
}
});


</script>

如果你想,你可以使用推荐的 Bootstrap 插件动态化自定义文件输入: https://www.npmjs.com/package/bs-custom-file-input

这个插件可以与 jQuery 一起使用,也可以与 React an Angular 一起使用

这个代码对我很有用:

<script type="application/javascript">
$('#elementID').change(function(event){
var fileName = event.target.files[0].name;
if (event.target.nextElementSibling!=null){
event.target.nextElementSibling.innerText=fileName;
}
});
</script>

当您有多个文件时,一个想法是只显示第一个文件和隐藏文件名的编号。

$('.custom-file input').change(function() {
var $el = $(this),
files = $el[0].files,
label = files[0].name;
if (files.length > 1) {
label = label + " and " + String(files.length - 1) + " more files"
}
$el.next('.custom-file-label').html(label);
});
$(document).on('change', '.custom-file-input', function (event) {
$(this).next('.custom-file-label').html(event.target.files[0].name);
})

最好的世界。工作在动态创建的输入,并使用实际的文件名。

这适用于 Bootstrap 4.1.3:

<script>
$("input[type=file]").change(function () {
var fieldVal = $(this).val();


// Change the node's value by removing the fake path (Chrome)
fieldVal = fieldVal.replace("C:\\fakepath\\", "");


if (fieldVal != undefined || fieldVal != "") {
$(this).next(".custom-file-label").attr('data-content', fieldVal);
$(this).next(".custom-file-label").text(fieldVal);
}
});
</script>

Johann-S 解决方案非常好用(看起来他创建了这个很棒的插件)

Bootstrap 4.3文档示例页面使用这个插件修改文件名: https://github.com/Johann-S/bs-custom-file-input

使用 引导自定义文件输入类.Add 插件到您的项目中,并将此代码添加到页面上的脚本文件中。

$(document).ready(function () {
bsCustomFileInput.init()
})