`
pml346680914
  • 浏览: 7047 次
  • 性别: Icon_minigender_1
  • 来自: 怀化
社区版块
存档分类
最新评论

自定义文件框的样式改进版(兼容IE与FireFox)

阅读更多
原生的文件上传框<input type="" />的效果不是很好看,

很多时候,需要改变样式,让它符合客户的要求。比如浏览按钮换成自定义的图片。

网上有一种错误的做法是,把文件上传框设置为隐藏,然后自定义一个文本框和一个按钮,点击按钮时用

js代码调用文件框的click事件弹出选择文件的效果。

这样做纯粹只能看看效果而已,因为浏览器考虑到所谓的安全因素,文件框只能是用户选择用鼠标点击,选择文件后

才能提交到服务器,否则提交表单时,浏览器会把文件框清空。

(经测试,用js获得对象,再住对象内添加html代码的方式也不能够正常上传)


不过有个高手想出了一个替代方案

就是把文件框设置为透明,并让其定位在一张定义好的图片按钮上,这种方案确实可行。

但是这种方案也有些限制,即按钮图片必须要根文件框的浏览按钮差不多的宽高。为什么了?

这是因为控制文件框宽高的样式不怎么好用,可能各个浏览器有各自的hack写法(没具体研究过)。

在这种可行方案的基础上,我做了如下改进,改进后对按钮图片基本无限制

先讲下思路:让文件框在按钮上随鼠标移动而移动,以保证无论用户点击按钮的哪个部位都能弹出文件选择框
。

具体代码如下

/**

 * 给文件框绑定到自定义按钮上

 * customerBtnId :自定义按钮的ID

 * fileInputId:文件件框ID

 * textInputId:文本框ID,文件框的value值在这个文本框中显示

 */

function bindFileInput(customerBtnId,fileInputId,textInputId){

    //添加事件监听函数

    var addListener=function(element,eventName,funName){

       if(window.addEventListener){

           element.addEventListener(eventName,funName,false);

       }else if(window.attachEvent){

           element.attachEvent('on'+eventName,funName);

       }else{

           element['on'+eventName]=funName;

       }

    }

    var render=function(){

       var fileInput=document.getElementById(fileInputId),

       customerBtn=document.getElementById(customerBtnId);

       fileInput.style.cssText="filter:alpha(opacity=0);opacity:0;"+

       "position:absolute;display:none;cursor:pointer;z-index:10;";

       fileInput.size=1;

       //当用户选择文件后,把文件框的value值显示到指定的文本框中

       addListener(fileInput,'change',function(){

           document.getElementById(textInputId).value=fileInput.value;

       });

       //当鼠标移上自定义按钮时,显示文件框

       addListener(customerBtn,'mouseover',function(){

           fileInput.style.display='block';

       });

       //当鼠标在按钮上移动时,让文件框跟随鼠标移动

       addListener(customerBtn,'mousemove',function(event){

           event=event||window.event;

           fileInput.style.left=event.clientX-50+'px';

           fileInput.style.top=event.clientY-10+'px';

       });

       //当鼠标离开文件框时,让文件框隐藏

       addListener(fileInput,'mouseout',function(){

           fileInput.style.display='none';

       });

    }

    addListener(window,'load',render);

}
 示例代码
<script type="text/javascript">

bindFileInput('browserBtn','file','filename');

</script>

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

<input type="text"  id="filename" />

<input type="button" value="浏览..." class="submit" id="browserBtn" />

 

分享到:
评论
2 楼 Jantol 2013-11-27  
有个问题文件框 大的话  会造成操作困扰
1 楼 Jantol 2013-11-26  
很好,刚好用上。

相关推荐

    ueditor老版本

    - **良好的跨平台性**:ueditor可以很好地在各种主流浏览器中运行,包括Chrome、Firefox、Safari和IE等,适应不同用户的浏览器环境。 - **安全性**:ueditor内置了一些安全机制,如防止XSS攻击,确保用户数据的安全...

    推荐10个js分页样式

    - 一个优秀的分页库应考虑到各种浏览器的兼容性,包括IE、Firefox、Chrome、Safari和Edge等。 综上所述,"推荐10个js分页样式"涉及到JavaScript分页库的使用、分页样式的选取和实现、以及相关的前端技术,如DOM...

    jQuery Select 下拉单选框模拟插件 V1.3.6

    jQuery Select V1.3.6通常与jQuery 1.7+版本兼容,对主流浏览器如Chrome、Firefox、Safari、Edge以及IE9+有良好的支持。由于使用了现代JavaScript特性,可能在旧版本的浏览器中存在兼容性问题。为了确保跨平台的稳定...

    jScrollPane2.0

    **jScrollPane 2.0** 是一个国外的开源项目,主要目标是为 Internet Explorer 和 Firefox 浏览器提供自定义的、美观的滚动条样式。这个插件在很多实际应用场景中都显示出了其价值,特别是在网页设计和开发过程中,...

    bootstrap janux

    在描述中提到的兼容浏览器包括:IE 9、IE 10、IE 11、Chrome、Firefox、Safari 和 Opera。这表明Bootstrap Janux 已经经过优化,可以在多种主流浏览器上稳定运行,提供了良好的跨浏览器兼容性。对于开发者来说,这...

    ymPrompt消息提示组件4.0版

    8. **兼容性**:由于基于jQuery,ymPrompt4可能对主流浏览器(如Chrome、Firefox、Safari、Edge和IE)有良好的兼容性。 9. **文档和示例**:为了方便开发者快速上手,组件通常会提供详尽的使用文档和示例代码。 ...

    dwz_jui 1.6.1版本

    2. **兼容性增强**:确保与最新的浏览器版本兼容,包括Chrome、Firefox、Safari、Edge和IE9及以上版本。 3. **新组件或功能**:可能添加了新的UI组件,如表单验证、图表插件等,以满足更丰富的应用场景。 4. **错误...

    fineuploader最新版本5.x

    FineUploader 5.x保持了对多种浏览器的良好支持,包括IE9+、Firefox、Chrome、Safari和Opera等主流浏览器,确保了文件上传功能在不同平台上的稳定运行。 3. **断点续传**: 新版本引入了断点续传功能,即使在网络...

    Jquery UI Customer-1.10.3

    jQuery UI 1.10.3 版本考虑了跨浏览器兼容性,支持主流的现代浏览器如 Chrome、Firefox、Safari、IE 等。同时,它致力于优化性能,确保组件在各种设备上运行流畅。 总结,jQuery UI 1.10.3 是一个功能丰富的 UI ...

    ymPrompt4.0

    这个库特别强调了对老版本浏览器的兼容性,包括Internet Explorer 6/7/8以及Firefox 2/3和Opera。一个关键特性是,在IE6环境下,ymPrompt的弹出框不会被页面中的select控件穿透,这解决了在旧版IE浏览器中常见的显示...

    easyui个版本文档

    EasyUI 支持多种浏览器,包括 Chrome、Firefox、Safari、IE 等,但对不同浏览器的兼容性可能存在差异。文档中会明确指出哪些版本的浏览器被支持,以及可能出现的问题。 9. **最佳实践与技巧** 文档可能还包括了...

    jQuery_zTree v3.5

    v3.5 版本的 zTree 已经经过优化,对多种浏览器(如 Chrome, Firefox, Safari, IE 等)都有较好的兼容性,确保在不同环境下都能正常工作。 8. **示例与文档**: zTree 官方提供详尽的文档和实例代码,帮助开发者...

    ext_2.2_皮肤_12种

    9. **跨浏览器兼容性**:EXT 2.2的皮肤需要确保在主要的浏览器(如IE、Firefox、Chrome、Safari等)上都能正常工作,这可能涉及到对不同浏览器CSS支持的了解和测试。 10. **维护和更新**:随着EXT的版本更新,旧...

    layui 离线文档含2.2.5和2.5.6两个版本.zip

    6. **良好的兼容性**:layui对主流浏览器(如Chrome、Firefox、Safari、Edge)有较好的兼容性,同时对IE8及更高版本也提供了支持。 在2.2.5版本中,layui可能已经具备了以上所述的基本特性,但在2.5.6版本中,可能...

    hplus V4.1.0

    7. **兼容性**:hplus支持大部分现代浏览器,包括Chrome、Firefox、Safari、Edge等,同时也考虑了对IE9及更高版本的兼容。 8. **与后端框架集成**:hplus不仅限于前端,也可以与各种后端框架(如Spring Boot、...

    JQuery_EasyUI_1.4.5_and_1.5

    3. **兼容性提升**:加强了对不同浏览器的兼容性,包括对最新版 Chrome、Firefox、IE 等的支持。 4. **API 调整**:一些方法和属性进行了调整,使得 API 更加统一和易用。 5. **皮肤更新**:提供了新的皮肤样式,以...

    FreeTextBox

    FreeTextBox与ASP.NET框架深度集成,兼容多个版本的.NET Framework,同时在不同浏览器(如Chrome、Firefox、IE等)上表现出良好的兼容性。它的高性能设计使得即使在高并发的Web应用中也能流畅运行。 6. **API和...

    bootstrap 3.3.4 源文件

    10. **兼容性**:Bootstrap 3.3.4支持大多数现代浏览器,包括Chrome、Firefox、Safari、Edge和IE9及以上版本。 在压缩包文件中,`bootstrap-3.3.4.zip`可能包含了源代码文件,如LESS、JavaScript和文档,用于开发者...

    jQuery EasyUI 1.4.3 版 API 中文版

    9. **兼容性**:jQuery EasyUI 1.4.3 应该保持对不同浏览器的良好兼容性,包括 Chrome、Firefox、Safari 和 IE 等,确保应用能在各种环境下正常运行。 10. **文档**:提供的中文版 API 文档对于国内开发者来说是一...

    dwz-ria-1.4.6.版本本地演示资源包

    DWZ UI 通常会注重浏览器兼容性,支持主流的桌面和移动浏览器,如 Chrome、Firefox、Safari、Edge 以及旧版的 IE。同时,优化的脚本和组件设计有助于提高页面加载速度和用户交互响应。 7. **扩展和定制** DWZ UI ...

Global site tag (gtag.js) - Google Analytics