更改“未选择文件”:


90

我有一个按钮“选择文件”,如下所示(我正在使用Jade,但它应该与Html5相同):

 input(type='file', name='videoFile')

在浏览器中,这将显示一个按钮,旁边带有一个文本“未选择文件”。我想将“未选择文件”文本更改为其他内容,例如“未选择视频”或“请选择视频”。我遵循了这里的第一个建议:

我不想在文件输入字段中看到“未选择文件”

但是这样做并没有改变文本:

 input(type='file', name='videoFile', title = "Choose a video please")

有人可以帮我弄清楚问题出在哪里吗?



1
@MahmoudFarahat我不想删除它,我想更改文本
FranXh 2013年

您不能删除文本,并在其旁边放置一个占位符标签吗?
罗杰·利普斯科姆

在另一篇文章中对此有一个非常整洁的答案。stackoverflow.com/a/21842275/3653494
P-Bagels'Sep

很有可能:查看此快速解决方案-包括其他内容,只需滚动到CSS底部:w3schools.com/code/tryit.asp?
filename=FWBJX00JSQD7

Answers:


17

我敢肯定您不能更改按钮上的默认标签,它们在浏览器中是硬编码的(每个浏览器以自己的方式呈现按钮标题)。查看此按钮样式文章


6
它不是按钮上的标签,而是旁边的“未选择文件”。当我选择一个文件时,它从没有选择文件更改为fileName.something。因此,我认为它应该是可变的。
FranXh 2013年

@JeremyThille因为人是人。
AMN

216

使用CSS隐藏输入,添加标签并将其分配给输入按钮。标签将是可单击的,并且在单击时将打开文件对话框。

<input type="file" id="files" class="hidden"/>
<label for="files">Select file</label>

然后根据需要将标签样式设置为按钮。


1
这甚至可以在IE9中使用,在IE9中您无法隐藏file input它并从JavaScript中单击它。谢谢!
huysentruitw

1
这很棒。朴实的优雅。爱它。
2013年

3
很好的解决方案,这应该是公认的答案。
Multitut 2014年

1
伟大的解决方案,它甚至可以让一个简单的方法来定制领域
萨法德

8
有趣的html解决方案,但对可用性不利。即使选择了文件,用户也将始终看到“选择文件”或等效文件。
克苏鲁2014年

26

试试这个只是一个把戏

<input type="file" name="uploadfile" id="img" style="display:none;"/>
<label for="img">Click me to upload image</label>

这个怎么运作

非常简单 Label元素使用“ for”标记通过id引用表单的元素。在这种情况下,我们使用“ img”作为它们之间的参考键。完成后,每当您单击标签时,它都会自动触发表单的元素单击事件,在本例中为文件元素单击事件。然后,我们使用display:none而不是visible:hidden来使文件元素不可见,从而不会产生空白空间。

享受编码


2
您可以通过解释它如何工作来使此答案更好。
user8397947

这样做似乎无法拖动文件。
fonZ

16

http://jsfiddle.net/ZDgRG/

见上面的链接。我使用CSS隐藏默认文本,并使用标签显示我想要的内容:

<div><input type='file' title="Choose a video please" id="aa" onchange="pressed()"><label id="fileLabel">Choose file</label></div>

input[type=file]{
    width:90px;
    color:transparent;
}

window.pressed = function(){
    var a = document.getElementById('aa');
    if(a.value == "")
    {
        fileLabel.innerHTML = "Choose file";
    }
    else
    {
        var theSplit = a.value.split('\\');
        fileLabel.innerHTML = theSplit[theSplit.length-1];
    }
};

12

是的,即使您有预上传文件列表,也无法删除此“未选择文件”。

我发现的最简单的解决方案(适用于IE,FF,CR)如下

  1. 隐藏您的输入并添加一个“文件”按钮
  2. 然后调用“文件”按钮,并要求他绑定文件上传(在此示例中,我使用的是JQuery)

$('.addfiles').on('click', function() { $('#fileupload').click();return false;});
<button class="addfiles">Add Files</button>
<input id="fileupload" type="file" name="files[]" multiple style='display: none;'>

完成了,可以完美地工作了:)

弗雷德


7

$(function () {
     $('input[type="file"]').change(function () {
          if ($(this).val() != "") {
                 $(this).css('color', '#333');
          }else{
                 $(this).css('color', 'transparent');
          }
     });
})
input[type="file"]{
    color: transparent;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<input type="file" name="app_cvupload" class="fullwidth input rqd">


这将非常有效地工作,它将在文件输入附近隐藏文本。
永远学习

6

但是,如果您尝试删除此工具提示

<input type='file' title=""/>

这不会工作。这是我的小技巧,请尝试使用标题加上空格。它将起作用。

<input type='file' title=" "/>

我在chrome和所有浏览器中进行了测试。运行正常。您能否对其进行测试并验证。
simon

4
在Chrome,Safari,Firefox中再次测试。这没用。
AdamInTheOculus '17

我检查了Chrome版本56.0.2924.87,它工作正常。您使用的是哪个版本?@PantsMagee
simon,

它只是增加提示你在设置文本title属性,因为我看到
费奥多尔

3

这样的事情可能会起作用

input(type='file', name='videoFile', value = "Choose a video please")

3

的HTML

  <div class="fileUpload btn btn-primary">
    <label class="upload">
      <input name='Image' type="file"/>
    Upload Image
    </label>
  </div>

的CSS

input[type="file"]
{
  display: none;
}
.fileUpload input.upload 
{
    display: inline-block;
}

注意: Btn btn-primary是一类引导按钮。但是按钮的位置可能看起来很奇怪。希望您可以通过内联CSS修复它。


3
 .vendor_logo_hide{
      display: inline !important;;
      color: transparent;
      width: 99px;
    }
    .vendor_logo{
      display: block !important;
      color: black;
      width: 100%; 
    }

$(document).ready(function() {
  // set text to select company logo 
  $("#Uploadfile").after("<span class='file_placeholder'>Select Company Logo</span>");
  // on change
  $('#Uploadfile').change(function() {
    //  show file name 
    if ($("#Uploadfile").val().length > 0) {
      $(".file_placeholder").empty();
      $('#Uploadfile').removeClass('vendor_logo_hide').addClass('vendor_logo');
      console.log($("#Uploadfile").val());
    } else {
      // show select company logo
      $('#Uploadfile').removeClass('vendor_logo').addClass('vendor_logo_hide');
      $("#Uploadfile").after("<span class='file_placeholder'>Select  Company Logo</span>");
    }

  });

});
.vendor_logo_hide {
  display: inline !important;
  ;
  color: transparent;
  width: 99px;
}

.vendor_logo {
  display: block !important;
  color: black;
  width: 100%;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>
<input type="file" class="vendor_logo_hide" name="v_logo" id='Uploadfile'>
<span class="fa fa-picture-o form-control-feedback"></span>

<div>
  <p>Here defualt no choose file is set to select company logo. if File is selected then it will displays file name</p>
</div>


我如何获得“选择公司徽标”文本显示在按钮下方而不是右侧?
Alex

3

使用标签文本已更改的标签

<input type="file" id="files" name="files" class="hidden"/>
<label for="files" id="lable_file">Select file</label>

添加jQuery

<script>
     $("#files").change(function(){
        $("#lable_file").html($(this).val().split("\\").splice(-1,1)[0] || "Select file");     
     });
</script>

2

只需更改输入的宽度即可。90px左右

<input type="file" style="width: 90px" />


1
这很简单而且工作正常。宽度为100px;:)
Sachin Shah

1
<div class="field">
    <label class="field-label" for="photo">Your photo</label>
    <input class="field-input" type="file" name="photo"  id="photo" value="photo" />
</div>

和CSS

input[type="file"]
{ 
   color: transparent; 
   background-color: #F89406; 
   border: 2px solid #34495e; 
   width: 100%; 
   height: 36px; 
   border-radius: 3px; 
}

1
输入[type =“ file”] {颜色:透明;背景颜色:#F89406;边框:2px实心#34495e; 宽度:100%; 高度:36像素;border-radius:3px; }
Ir Calif's

1

您可以这样尝试:

<div>
    <label for="user_audio" class="customform-control">Browse Computer</label>
    <input type='file' placeholder="Browse computer" id="user_audio"> <span id='val'></span>
 <span id='button'>Select File</span>
</div>

显示所选文件:

$('#button').click(function () {
    $("input[type='file']").trigger('click');
})

$("input[type='file']").change(function () {
    $('#val').text(this.value.replace(/C:\\fakepath\\/i, ''))
    $('.customform-control').hide();
})

感谢@ unlucky13获得选定的文件名

这是工作的小提琴:

http://jsfiddle.net/eamrmoc7/


0

这将帮助您更改“没有文件选择选择个人资料图片”的名称

<input type='file'id="files" class="hidden"/>  
<label for="files">Select profile picture</label>

按钮不见了。
滇盛

这对我来说很好。按钮消失了,但是单击标签打开文件打开对话框,您可以样式化标签以使其看起来像按钮。它摆脱了烦人的“没有选择文件”文本。
NoBullMan '17

0

我会使用“按钮”而不是“标签”,希望对您有所帮助。

这只会显示一个按钮,用户单击后将弹出文件选择器,选择文件后自动上传。

<button onclick='<%= "$(\"#" + FileUpload1.ClientID + "\").click(); return false;" %>'>The Text You Want</button>

<asp:FileUpload onchange="$('#btnUpload').click();" ID="FileUpload1" runat="server" style="display: none;" />

<asp:Button ID="btnUpload" ClientIDMode="Static" runat="server" OnClick="btnUpload_Click" style="display: none;" />

0

您可以使用以下CSS代码隐藏(未选择文件)

的HTML

<input type="file" name="page_logo" id="page_logo">

的CSS

input[type="file"]:after {color: #fff}

确保颜色与背景颜色匹配


-1

在以下位置有一个很好的示例(包括文件类型验证):

https://github.com/mdn/learning-area/blob/master/html/forms/file-examples/file-example.html

基本上,这是Amos使用按钮的充实版本。

我尝试了上面的一些建议,但都没有成功(但也许就是我)。

我打算重新使用它进行Excel文件转换

  <form>
    <div>
      <label for="excel_converts">Choose a spreadsheet to convert.</label>
      <input type="file" id="excel_converts" name="excel_converts" accept=".xlsx, .xls, .csv" >
    </div>
    <div class="preview">
      <p>No spreadsheet currently selected for conversion</p>
    </div>
    <div>
      <button>Submit</button>
    </div>
  </form>

因此,这是为什么?也许是因为在一篇完全无关的文章中,我建议做下意识的投票很容易,但要进行建设性要容易得多?
DLyons
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.