我想<input type="file" />
使用 CSS3进行样式设置。
或者,我希望用户按下一个div
(我将设置样式),这将打开浏览窗口。
是否可以仅使用 HTML、CSS3 和 Javascript/jQuery 来做到这一点?
我想<input type="file" />
使用 CSS3进行样式设置。
或者,我希望用户按下一个div
(我将设置样式),这将打开浏览窗口。
是否可以仅使用 HTML、CSS3 和 Javascript/jQuery 来做到这一点?
我有一个粗略的例子,你可能想了解一下......
<div id="file">Chose file</div>
<input type="file" name="file" />
#file {
display:none;
}
var wrapper = $('<div/>').css({height:0,width:0,'overflow':'hidden'});
var fileInput = $(':file').wrap(wrapper);
fileInput.change(function(){
$this = $(this);
$('#file').text($this.val());
})
$('#file').click(function(){
fileInput.click();
}).show();
在检查了 Reigels 的想法和这个想法之后,我编写了这个简单的解决方案来解决type="file"
输入字段样式的常见问题(在 Firefox、Safari 和 Chrome 上测试)。
<div style="position:relative;">
<div id="file" style="position:absolute;">Click here to select a file</div>
<input type="file" name="file" style="opacity:0; z-index:1;" onchange="document.getElementById('file').innerHTML = this.value;">
</div>
然后,您当然可以根据需要设置“文件”div 的样式。
如果您想使用type="text"
输入而不是 div,只需更改innerHTML
为value
:
<div style="position:relative;">
<input type="text" id="file" style="position:absolute;" placeholder="Click here to select a file">
<input type="file" name="file" style="opacity:0; z-index:1;" onchange="document.getElementById('file').value = this.value;">
</div>
这是我使用 jQuery 的原始答案:
<div style="position:relative;">
<div id="file" style="position:absolute;">Click here to select a file</div>
<input type="file" name="file" style="opacity:0; z-index:1;" onchange="$('#file').text($(this).val());">
</div>
我也为此做了一个自定义样式。看看这个
HTML
<input type="file" id="test">
<div class="button-group">
<a href="#" id="browse" class="button primary">Browse</a>
<a href="#" id="save" class="button">Save</a>
<a href="#" id="clear" class="button danger">Clear</a>
</div>
<input type="text" id="testfile"></input>
CSS
body {
padding:100px;
}
input[type="file"] {
position:absolute;
display:none;
}
#testfile {
height: 26px;
text-decoration: none;
background-color: #eee;
border:1px solid #ccc;
border-radius:3px;
float:left;
margin-right:5px;
overflow:hidden;
text-overflow:ellipsis;
color:#aaa;
text-indent:5px;
}
#actionbtnBrowse, #actionbtnSave {
margin:0 !important;
width:60px;
}
查询
$("#browse").click(function () {
$("#test").click();
})
$("#save").click(function () {
alert('Run a save function');
})
$("#clear").click(function () {
$('#testfile').val('');
})
$('#test').change(function () {
$('#testfile').val($(this).val());
})
还添加到外部资源选项卡:
https://github.com/necolas/css3-github-buttons/blob/master/gh-buttons.css
以下是使用 HTML、CSS 和 Javascript(不使用任何框架)的方法:
这个想法是<input type='file'>
隐藏按钮并使用<div>
您设计为文件上传按钮的虚拟对象。单击此按钮后<div>
,我们将其称为 hidden <input type='file'>
。
演示:
// comments inline
document.getElementById("customButton").addEventListener("click", function(){
document.getElementById("fileUpload").click(); // trigger the click of actual file upload button
});
document.getElementById("fileUpload").addEventListener("change", function(){
var fullPath = document.getElementById('fileUpload').value;
var fileName = fullPath.split(/(\\|\/)/g).pop(); // fetch the file name
document.getElementById("fileName").innerHTML = fileName; // display the file name
}, false);
body{
font-family: Arial;
}
#fileUpload{
display: none; /* do not display the actual file upload button */
}
#customButton{ /* style the dummy upload button */
background: yellow;
border: 1px solid red;
border-radius: 5px;
padding: 5px;
display: inline-block;
cursor: pointer;
color: red;
}
<input type="file" id="fileUpload"> <!-- actual file upload button -->
<div id="customButton">Browse</div> <!-- dummy file upload button which can be used for styling ;) -->
<span id="fileName"></span> <!-- the file name of the selected file will be shown here -->
除了雷格尔,
这是更简单的实现。您也可以在多个文件输入字段上使用此解决方案。希望这可以帮助一些人;-)
<input type="file" name="file" />
<!-- div is important to separate correctly or work with jQuery's .closest() -->
<div>
<input type="file" name="file[]" />
</div>
<div>
<input type="file" name="file[]" />
</div>
<div>
<input type="file" name="file[]" />
</div>
// make all input fields with type 'file' invisible
$(':file').css({
'visibility': 'hidden',
'display': 'none'
});
// add a textbox after *each* file input
$(':file').after('<input type="text" readonly="readonly" value="" class="fileChooserText" /> <input type="button" value="Choose file ..." class="fileChooserButton" />');
// add *click* event to *each* pseudo file button
// to link the click to the *closest* original file input
$('.fileChooserButton').click(function() {
$(this).parent().find(':file').click();
}).show();
// add *change* event to *each* file input
// to copy the name of the file in the read-only text input field
$(':file').change(function() {
$(this).parent().find('.fileChooserText').val($(this).val());
});