如何更改<input type =“ file” />的按钮文本?


Answers:


153

使用Bootstrap FileStyle,该样式用于设置表单的文件字段的样式。它是基于jQuery的组件库(称为Twitter Bootstrap)的插件。

用法示例:

包括:

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

通过JavaScript:

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

通过数据属性:

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

似乎不适合我。它仍然显示brorser的默认按钮。另外,github.com / markusslima / bootstrap-filestyle.git上的演示 也不起作用-所有示例均显示默认按钮。我想念什么吗?
雅。

7
@Tony Uhh ....是什么让您觉得Bootstrap也没有在下面使用“古怪的<img /> hack”?:-)
Andz

@Ya您能告诉我什么浏览器及其版本吗?现在已在Linux上的Chrome版本43.0.2357.130(64位)上进行了测试,所有示例均可完美运行。
费尔南多·科什

20
在这么小的问题上抛出一个javascript库(带有一个插件!)实在是太过分了。
MKaama

3
不赞成投票。它甚至不是答案,只是需要额外库的解决方法。答案应旨在更改浏览器的呈现行为。
wdetac

108

您可以改为放置图像,并按以下方式进行操作:

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:在IE9和IE10中,如果您触发通过javascript输入的文件中的onClick,则表单将被标记为“危险”,并且无法使用javascript提交,不确定是否可以按照传统方式提交。


5
这是一个聪明的解决方案。您还不能使用<button>元素执行此操作吗?
指挥官

1
@Code Commander-谢谢,是的,您可以对每个想要的元素进行操作,但是最常见的是<image>元素。只需摆脱“文件输入”的button +文本字段...
ParPar

2
只是对任何使用上述内容的人都非常了解,某些移动浏览器会以编程方式禁用触发文件输入的点击。具体来说,适用于Galaxy S III的android 4
newshorts

我正在使用<input type="file" 内部asp.net gridview行,可以动态添加其行..因此,在单击图像时调用相关的输入单击触发器(同一行)会让人头疼!:/
sohaiby 2015年

您的解决方案不起作用。您没有设置边框,边距,填充和背景颜色,否则很明显
yan bellavance

88

隐藏文件输入。创建一个新输入以捕获单击事件并将其转发到隐藏的输入:

<input type="button" id="loadFileXml" value="loadXml" onclick="document.getElementById('file').click();" />
<input type="file" style="display:none;" id="file" name="file"/>

以ie7模式放入HTA文件后,我必须;在最后将其删除。
ATek

太好了,不想只包含引导程序来更改文本的两个单词,但是如果文件输入是动态创建的,您将如何做呢?
asparism '17

@asparism使用JavaScript来操作DOM,通过设置其样式将其隐藏,并使用before()并添加新的输入元素?
MushyPeas

3
@MushyPeas这是最简单的方法。试图玩css,但是此解决方案更快,更轻松。谢谢
Mara

2
这对我来说也是最简单的方法!它还使我可以将“模拟”文件按钮样式化为一组其他表单按钮选项之一,而不必担心显示看起来很奇怪的“浏览”文件按钮。
哈里·曼萨基斯

47

“上传文件...”文本是由浏览器预先定义的,无法更改。解决此问题的唯一方法是使用基于Flash或Java的上载组件,例如swfupload


3
您能证明它不能更改吗?
user198729

或通过浏览器的源代码浏览,至少对于开放源代码而言。
Pekka

这可以通过答案(对于另一个问题,对于类型为文件“ TYPE =“ FILE””的输入字段,诸如“为什么是值的内容'VALUE =“ C:\ someFile.txt”',被忽略)浏览器?”):stackoverflow.com/questions/1342039
Peter Mortensen

23

作品完美地在所有浏览器希望它会为你工作了。

HTML:
<input type="file" class="custom-file-input">

CSS:

 .custom-file-input::-webkit-file-upload-button {
  visibility: hidden;
}
.custom-file-input::before {
  content: 'Select some files';
  display: inline-block;
  background: -webkit-linear-gradient(top, #f9f9f9, #e3e3e3);
  border: 1px solid #999;
  border-radius: 3px;
  padding: 5px 8px;
  outline: none;
  white-space: nowrap;
  -webkit-user-select: none;
  cursor: pointer;
  text-shadow: 1px 1px #fff;
  font-weight: 700;
  font-size: 10pt;
}
.custom-file-input:hover::before {
  border-color: black;
}
.custom-file-input:active::before {
  background: -webkit-linear-gradient(top, #e3e3e3, #f9f9f9);
}

更改content: 'Select some files';您想要的文字''

如果不使用firefox,则使用它代替输入:

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

<input id="Upload" type="file" multiple="multiple" name="_photos" accept="image/*" style="visibility: hidden">

不过可在Safari上使用
Cullub 2015年

在我的FF 41.0.2上,它的运行效果非常好。您正在运行跨浏览器兼容性问题,请参阅CSS BOX MODEL以缩小问题。
代码黑

1
问题可能是FF是基于Gecko而非Webkit构建的。(我的最佳猜测)
Cullub

2
<label id =“ addButton” for =“上传” style =“ background-color:#000; color:#fff; padding:4px; border-radius:4px; font-family:monospace;” >选择某些文件</ label> <input id =“ Upload” type =“ file” multiple =“ multiple” name =“ _ photos” accept =“ image / *” style =“ visibility:hidden”>
代码黑色

4
好,谢谢!看看这个JSFiddle。如果您用这个来修改答案,我认为值得
投票

10

是一个JQuery插件,用于更改输入文件元素的按钮文本。

HTML示例:

<input type="file" id="choose-file" />

JS示例:

$('#choose-file').inputFileText({
    text: 'Select File'
});

结果:

插件结果



8

只是

<label class="btn btn-primary">
  <i class="fa fa-image"></i> Your text here<input type="file" style="display: none;"  name="image">
</label>

[使用摘要编辑]

<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" rel="stylesheet"/>
<link href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet"/>

<label class="btn btn-primary">
<i class="fa fa-image"></i> Your text here<input type="file" style="display: none;" name="image">
</label>


尝试看看我在这里做了什么jsfiddle.net
Ken Karlo

谢谢,正是我想要的:)
Garth Baker,

7

我认为这是您想要的:

<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"> 

3

编辑:我现在通过评论询问您正在询问按钮文本,而不是文件路径。我的错。如果其他人偶然发现了这个问题,我将在下面保留我的原始答案。

第二次编辑:我删除了此答案,因为我认为我误解了这个问题,而我的答案没有意义。但是,在另一个答案中的注释表明,人们仍然希望看到此答案,因此我不删除它。

我的原始答案(我以为OP在询问路径,而不是按钮文字):

出于安全原因,此功能不受支持。Opera网络浏览器曾经支持此功能,但已将其删除。想想如果得到支持,那将是可能的;您可以制作一个带有文件上传输入的页面,用一些敏感文件的路径预填充它,然后使用onload事件触发的javascript自动提交表单。这对于用户进行任何操作来说太快了。


3

使用<label>的标题

<form enctype='multipart/form-data' action='/uploads.php' method=post>
<label for=b1>
    <u>Your</u> caption here
<input style='width:0px' type=file name=upfile id=b1
 onchange='optionalExtraProcessing(b1.files[0])'
 accept='image/png'>
</label>
</form>

无需任何javascript就可以使用。您可以根据自己的喜好对标签进行任何复杂程度的装饰。单击标签时,单击将自动重定向到文件输入。可以通过任何方法使文件输入本身不可见。如果希望标签看起来像按钮,则有许多解决方案,例如:

label u {
    -webkit-appearance: button;
    -moz-appearance: button;
    appearance: button;

    text-decoration: none;
    color: initial;
}

2

只有CSS和bootstrap类

        <div class="col-md-4 input-group">
            <input class="form-control" type="text"/>
            <div class="input-group-btn">
                <label for="files" class="btn btn-default">browse</label>
                <input id="files" type="file" class="btn btn-default"  style="visibility:hidden;"/>
            </div>
        </div>

1
  1. 在此之前<input type="file">,添加一个图像,<input style="position:absolute">它将占据<input type="file">
  2. 对文件元素使用以下CSS

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

0

如果您使用滑轨并在应用时遇到问题,我想在@Fernando Kosh发表的原始答案中添加一些技巧

  • 下载文件zip并复制文件bootstrap-filestyle.min.js ke文件夹app / assets / javascripts /
  • 打开您的application.js并在下面添加此行

    // =需要bootstrap-filestyle.min

  • 打开咖啡并添加这行

    $(“:file”)。filestyle({buttonName:“ btn-primary”,buttonBefore:true,buttonText:“您的文字在这里”,图标:false});


0

您可以简单地添加一些CSS技巧。您不需要javascript或更多输入文件,并且我保留现有的value属性。您需要添加css即可。您可以尝试此解决方案。

.btn-file-upload{
     width: 187px;
     position:relative;
 }

.btn-file-upload:after{
    content:  attr(value);
    position: absolute;
    top: 0;
    left: 0;
    bottom: 0;    
    width: 48%;
    background: #795548;
    color: white;
    border-radius: 2px;
    text-align: center;
    font-size: 12px;
    line-height: 2;
 }
<input type="file" class="btn-file-upload" value="Uploadfile" />


0

这是一种使用纯HTML和javascript“更改”文件类型的输入文本的方法:

<input id='browse' type='file' style='width:0px'>
<button id='browser' onclick='browse.click()'>
    *The text you want*
</button>

0

对我来说,它不能使用bootstrap-filestyle自定义文本。它可以帮助按钮修饰,但是在进行CSS摔角之前,我会尝试更改以下内容:

$( document ).ready(function() {
   $('.buttonText').html('Seleccione ficheros');
});

bootstrap-filestyle使用一个名为butonText的类将组件呈现为span,因此在加载文档时只需更改文本即可。简单易用,它必须在所有浏览器上都可以使用。

干杯


0

我为我的项目这样做是这样的:

.btn-outlined.btn-primary {
  color: #000;
}
.btn-outlined.btn-primary:active, .btn-outlined.btn-positive:active, .btn-outlined.btn-negative:active {
  color:#000;
}
.btn-block {
  display: block;
  width: 100%;
  padding: 15px 0;
  margin-bottom: 10px;
  font-size: 18px;
  font-family: Arial, Helvetica, sans-serif;
  text-align: center;
}
<label for="fileUpload" class="btn btn-primary btn-block btn-outlined">Your text</label>
<input type="file" id="fileUpload"style="display: none;">


-1

这是一种替代解决方案,可能会对您有所帮助。这会隐藏出现在按钮外的文本,并将其与div的背景色混合。然后,您可以给div加上自己喜欢的标题。

<div style="padding:10px;font-weight:bolder; background-color:#446655;color: white;margin-top:10px;width:112px;overflow: hidden;">
     UPLOAD IMAGE <input style="width:100px;color:#446655;display: inline;" type="file"  />
</div>

在Chrome 39中,我同时看到了“上传图像”文本和<input>按钮。自您发布此信息以来,chrome对文件输入的处理方式可能已更改?
EricP 2014年

@ yan-bellavance你在做什么?如果您认为答案不正确或无济于事,请投反对票,但绝不要污损它!
Kaiido
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.