可能重复:
输入类型=文件仅显示按钮
有这样的设计:
我可以修改它使其不显示文本字段吗?
在quirksmode中找到了一个非常好的指南- 设置输入类型 =“文件”
引用一些修改以匹配问题:
取一个法线
<input type="file">
并将其放入一个带有position: relative
. 或者absolute
向同一父元素添加具有正确样式的图像或按钮。绝对定位此元素,使它们与
<input type="file">.
将 的 设置为
z-index
使其<input type="file">
位于2
样式图像或按钮的顶部。最后,将 的设置
opacity
为。现在变得实际上是不可见的,并且样式化的图像或按钮会发光,但您仍然可以单击“浏览”按钮。(请注意,您不能使用,因为真正不可见的元素也是不可点击的,我们需要保持可点击)<input type="file">
0
<input type="file">
visibility: hidden
<input
type="file">
建议:可以使用uploadify插件。
在您的问题中看不到 jQuery 标记,但是嘿,它很有帮助,并且可能很容易在 vanilla JS 中重写。这是我从Ideal Forms中提取的一个小 jQuery 插件,我在 github 上维护的一个插件。它涵盖了做你想做的所有基础知识,并为 IE 和multiple
HTML5 浏览器提供后备。加上处理事件和标记替换。CSS 是你自己的,但没有什么太复杂的样式,如你所见。如果需要,您也可以隐藏文本字段。这里的想法是,这允许使用 CSS 进行任何可能的自定义。
$.fn.toCustomFile = function () {
return this.each(function () {
var
$file = $(this), // The file input
// Necessary markup
$wrap = $('<div class="wrap">'),
$input = $('<input type="text" class="filename" />'),
$button = $('<button type="button" class="upload">Open</button>')
// Hide by shifting to the left, that way can
// still use events that are otherwise problematic
// if the field is hidden as in "display: none"
$file.css({
position: 'absolute',
left: '-9999px'
})
// Events
$button
.attr('tabIndex', -1) // disable focus on button for better usability
.click(function () {
$file.trigger('click') // Yes, `click`, not `change`. Crossbrowser compat.
})
$file
.attr('tabIndex', -1)
.on({
change: function () {
// Detect if browser supports HTML5 "file multiple"
var multipleSupport = typeof $('input')[0].multiple !== 'undefined',
files = [],
fileArr,
filename
if (multipleSupport) {
fileArr = $file[0].files
for (var i = 0, len = fileArr.length; i < len; i++)
files.push(fileArr[i].name)
filename = files.join(', ')
} else {
filename = $file.val().split('\\').pop() // Remove fakepath
}
$input.val(filename)
// Set filename as title tooltip on
// input field for better usability
$input.attr('title', filename)
},
focus: function () {
$input.trigger('focus')
}
})
$input
.on({
keyup: function () { $file.trigger('change') },
focus: function () { $file.trigger('change') },
blur: function () { $file.trigger('blur') },
// Open files when pressing [ENTER]
// on the input field
keydown: function (e) { if (e.which === 13) $file.trigger('click') }
})
// Append to DOM
$wrap.append($button, $input).insertAfter($file)
})
}
这是一个易于使用的要点:https ://gist.github.com/3051209