http://www.itfeed.cn/post.asp?id=3420
因为不同浏览器下如果使用默认的input type=”file”元素,效果如下
为了保证不同浏览器下的UI一致我们有需求要自定义input type=”file”元素的样式
如何Style input type=”file”元素的相关长篇讨论
1. Styling an input type=”file”
http://www.quirksmode.org/dom/inputfile.html
2. Howto Style the Button of a input type=”file” Control
http://imar.spaanjaars.com/154/howto-style-the-button-of-a-input-typefile-control
翻译成白话文就是
1. 隐藏input type=”file”
2. 用CSS将a+span做成按钮样式,对其做事件绑定,点击之后触发input type=”file”的点击事件
3. 用input type=”text”显示input type=”file”选中文件的值
查看能工作的live code
http://jsfiddle.net/jihao/sFCQV/
HTML
<input type="text" id="fakeFile" name="fakeFile">
<a class="linkButton" id="link_browse" href="#"><span>Link Button BROWSE</span></a>
<input id="theFile" type="file"
style="visibility:hidden;opacity:0;cursor:pointer;*filter: alpha(opacity=0);">
CSS
a.linkButton{
background: #332233;/*style this link to look like a button*/
color: #FFFFFF;
padding: 0 0 0 10px;
text-decoration: none;
}
a.linkButton>span{
padding: 0 10px 0 0;
}
JavaScript
$(function() {
$('#browse,#link_browse').click(function(event) {
event.preventDefault();
$('#theFile').trigger('click');
});
function changeCallBack() {
$('#fakeFile').val($('#theFile').val());
};
//this works for FF, easy job
$('#theFile').bind('change', function() {
alert('gotcha!');
changeCallBack();
});
});
写完这段代码之后遇到的相关问题
问题1. FireFox下不会显示文件全路径(google得知这是FF的安全考虑,不影响form提交)
问题2. IE下选择文件后不会触发change事件,原因是IE处理打开文件的机制(参考下面的链接看更多讨论)
对于IE8,这个问题的解决办法如下,setTimeout会阻塞,直到文件选择器关闭之后,回调函数才被调用(更新用来显示的input type=”text”的值)
if ($.browser.msie) {
$('#theFile').bind('click', function() {
//this solution works for IE8, not Maxthon2, so seems not IE6 either(not tested)
setTimeout(function() {
alert('[IE8] setTimeout get called after open file dialog was closed');
changeCallBack();
}, 0);
});
}
查看能工作的live code
http://jsfiddle.net/jihao/sFCQV/
关于IE change事件的相关讨论
1. jQuery, .change() notification, and IE (关于radio button的change事件绑定)
http://norman.walsh.name/2009/03/24/jQueryIE
2. jQuery: change event to input file on IE
http://stackoverflow.com/questions/2389341/jquery-change-event-to-input-file-on-ie
就是说IE不blur的话file不触发change事件,解决办法是设置一个setTimeout,然后再0毫秒后执行,利用文件选择框的阻塞。
分享到:
相关推荐
### 如何将input type=file显示的“浏览”变成英文的 在网页开发中,经常会遇到需要用户上传文件的情况。默认情况下,HTML中的`<input type="file">`元素的“浏览”按钮通常会显示为系统语言,对于英文界面的需求,...
本篇文章将详细讲解如何将`<input type="file">` 控件的“浏览”按钮和提示改为英文。 首先,我们需要理解`<input type="file">`的基本结构和属性。这个标签创建了一个可以点击的区域,用户可以通过点击打开本地...
一、input type=file 文件选择表单元素 input type=file 是 HTML 中的一种表单元素,用于选择文件并上传到服务器。HTML5 之前的 input type=file 元素只能一次上传一张图片,无法满足一次上传多图的交互需求。因此...
本文将深入探讨如何使用 `input type="file"` 激活手机的照相机功能以及选择图片上传。 首先,`<input type="file">` 是HTML中的一个表单元素,它的主要作用是让用户选择本地文件。在默认情况下,点击这个元素会...
然而,在实际使用中,我们可能会遇到一些问题,比如在WebView中使用`<input type="file">`标签时,用户无法选择本地文件。这个现象主要是由于Android的安全机制和权限控制导致的。本文将详细讲解如何解决这个问题。 ...
C#如何使用input[type=file]进行多个图片上传(XMLHttpRequest与后台交互) 详情可看:https://blog.csdn.net/weixin_44713389/article/details/90746459
input[type=file] 标签中的属性accept=application/msword,application/pdf 在pc上正常,但是在手机ios和android上这个文件格式限制会被忽略,所以需要在js中增加格式的判断,以及对应显示样式的设置.(我也是刚发现,...
为了提升用户体验和界面美观度,我们可以自定义滑动条的样式。本教程将深入探讨如何使用HTML5、CSS3以及JavaScript来实现一个具有个性化外观的滑动条。 首先,我们创建一个基本的HTML结构,包含一个`<input type=...
Android Webview中的`input=file`失效问题主要由安全策略和权限限制引起。通过自定义`WebChromeClient`、请求读取权限、实现文件选择器和使用`FileProvider`,可以解决这个问题,使用户能够正常在Webview中上传文件...
`input type="file"` 是HTML中用于创建文件选择器的元素,它的默认样式往往不符合设计师的期望,因此需要对其进行美化。原始的`file`控件通常呈现为一个简单的文本框和一个"浏览"按钮,其外观朴素且难以与页面其他...
总的来说,`<input type="file">` 结合 `FileReader API` 可以实现用户在选择图片后的即时预览,这在现代Web开发中是一个常用且实用的技术,提高了用户的交互体验。理解并掌握这一技术,对于提升网页的交互性和专业...
总的来说,自定义`<input type="file">`元素的样式涉及到HTML结构的调整、CSS定位和透明度控制,以及对不同浏览器兼容性的考虑。通过这些技术,我们可以创建出符合设计需求且具有良好用户体验的文件上传按钮。
4. **Web组件**:使用Web组件技术,可以创建自定义的file input组件,内部包含多语言支持。这样,当切换语言时,只需更新组件的属性即可。 5. **i18n工具**:国际化的标准工具,如i18next,可以方便地管理和切换...
本篇文章将详细讲解如何解决WebView不支持网页中的文件上传问题,以及如何通过自定义实现来确保其正常工作。 首先,我们需要理解为什么WebView不直接支持`input type="file"`。出于安全考虑,原生的WebView控件通常...
在提供的压缩包文件"Firefox和IE对input number的兼容"中,可能包含了实现这种兼容性的源代码、示例页面、CSS样式以及测试用例。开发者可以参考这些资源来理解和应用这个插件,或者作为自定义兼容解决方案的基础。 ...
本文将详细介绍如何使用`ajaxfileupload.js`这个jQuery插件,结合`input[type=file]`元素,实现无刷新的文件上传功能。 首先,`ajaxfileupload.js`是一个基于jQuery的轻量级插件,它允许开发者通过异步方式发送文件...
需要注意的是,由于安全和浏览器兼容性问题,直接对`input[type=file]`进行样式定制存在一定的限制。例如,不能更改文件选择对话框的外观,也不能阻止其弹出。但是,通过CSS,我们可以让这个元素看起来像是网站设计...
### 如何使 input type=file 只读并实现文件上传 在网页开发中,有时我们需要让用户选择一个文件但不允许他们更改已选择的文件。这通常是为了防止用户在提交表单前临时更改文件,从而确保文件的一致性和安全性。...
HTML+JAVA 手机端相册或者拍照上传到服务器。前台代码部分:手机选择图片input type=file,通过form表单提交到后台;后台java代码部分:获取表单提交的文件和普通控件数据,将文件写入服务器某路径下