上传文件控件

我们在编写页面的时候会遇到这样的情况,需要上传文件。我们一般会使用<input type="file" />来处理。

但是他会有一个小问题。下面我们一起来看一看。

不同浏览器下式样差别较大。

  IE8:在按钮前面有一个文本框用来显示文件路径。

  chrome:在按钮后面显示文件上传状态。默认文言略有不同。

  Firefox:与chrome相似。

  不同浏览器下的式样不同,导致我们不能基于一个稳定的式样做设置,当我们设置width和height也会遮盖不同的部分。

解决方案1:将<input>隐藏,在原处放一个按钮,在按钮的click事件中手动触发<input>的click事件。

解决方案2:先做一个假的按钮的放在底下下,将<input type="file" />的宽高与假按钮相同、透明度设置为0,并通过绝对布局定位到假按钮的位置。这样看到的是按假钮,点击的是盖在上面的<input>

接下来我们来分别看看这两个方案:

HTML:

<div class="inputBox">
    <input class="btnInput" type="button" />
    <input class="fileInput" type="file" />
</div>

方案1:将<input>隐藏,在原处放一个按钮,在按钮的click事件中手动触发<input>的click事件。

CSS:

.inputBox{
  width:500px;
  height:500px;
}

.btnInput{
  display:block;
  width:100px;
  height:30px;
  /*按钮相关式样*/
}

.fileInput{
  display:none;
}

js,手动事件传递

1 $(‘.btnInput‘).click(function(){
2     $(‘.fileInput‘).trigger("click");
3 });

这时我们运行代码,发现当点击button时,确实弹出了文件选择器窗口。

我们通常会在<input type="file" />的onchange中做表单的验证和提交。

但是这样做会有一个问题出现:IE下不一定会接到onchange事件。下面我们来试一下:

添加以下的js代码

1 $(‘body‘).on("change", ‘.fileInput‘, function(){
2    alert("change event");
3 });

当我们初次传文件,或是改变了文件时在chrome下还没有问题,但是在IE 8 下就没有触发onchange事件。

我们改变以下结构

<input class="fileInput" type="file" onchange=“fchange();” />
window.fchange = function(){
    alert("change event"); }

标签中的onchange会在window下找函数,如果你的事件处理函数不在window下,那么你需要绑一下。这样做会弹出提示框,但是如果函数体中引用了大量的子作用域变量,函数又绑在window下,内存释放也会有问题。所以我们尽量不要用这个方法。

但是我们要明白为什么IE下接不到事件,因为IE下的有些版本认为onchange要在有焦点离开才能触发,我们手动转的事件焦点一直在button上。所以我们为求保险,要让input被点击。

方案2:先做一个假的按钮的放在底下下,并通过绝对布局定位到假按钮的位置。这样看到的是按假钮,点击的是盖在上面的<input>

 1 .inputBox{
 2   position: relative;
 3 }
 4
 5 .btnInput{
 6    /*按钮式样*/
 7 }
 8
 9 .fileInput{
10   position: absolute;
11   /*与按钮同高同宽*/
12   opacity: 0;
13   filter:alpha(opacity=0);   //IE
14    /*top left 调整到按钮位置或用JS算*/     z-index:高一点
15 }

这样就没有问题了。

  

上传文件控件

时间: 2024-10-06 04:54:57

上传文件控件的相关文章

兼容IE浏览器样式的html上传文件控件

最近在公司做项目时需要用到html的上传文件控件,但发现原生的上传文件控件<input type="file" />在IE.Chrome浏览器的显示效果相差很大,为了统一样式,我参考了网上的许多方法,下面给出我自己的代码实现(实际上就是在原生的input file上面加个外壳,再添加一些样式,让它看上去不像原生的这么丑) html部分 <div class="upload-box"> <div class="input&quo

jquery上传文件控件Uploadify

基于jquery的文件上传控件,支持ajax无刷新上传,多个文件同时上传,上传进行进度显示,删除已上传文件. 要求使用jquery1.4或以上版本,flash player 9.0.24以上. 有两个版本,一个用flash,一个是html5.html5的需要付费~所以这里只说flash版本的用法. 官网:http://www.uploadify.com/ 控件截图: 用法: 首先引用下面的文件 <link rel="stylesheet" type="text/css&

html+css上传文件控件美化

html上传美化: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>上传文件</title> <style> label { position: relative; display: inline-block; background: #D0EEFF; border: 1px solid #9

上传文件控件的样式美化

实现原理: 第一步:分别建一个input[type=text].一个input[type=button]标签,优化样式: 第二步:把input[type=file]标签,设置透明,位置对齐以上的两个标签并位于其底部: 第三步:用jquery实现把input[type=file]的文字显示在input[type=text]框内. html: <div class="uploader"> <input class="fileName" type=&qu

Webform之FileUpload(上传按钮控件)简单介绍及下载、上传文件时图片预览

1.FileUpload上传控件:(原文:http://www.cnblogs.com/hide0511/archive/2006/09/24/513201.html) FileUpload 控件显示一个文本框控件和一个浏览按钮,使用户可以选择客户端上的文件并将它上载到 Web 服务器.用户通过在控件的文本框中输入本地计算机上文件的完整路径(例如,C:\MyFiles\TestFile.txt)来指定要上载的文件.用户也可以通过单击“浏览”按钮,然后在“选择文件”对话框中定位文件来选择文件.  

Form_通过FND_FNDFLUPL标准功能上传CSV控件(案例)

2014-06-08 BaoXinjian 一.总结 1. 上传资料 (1).通过调用function<FND_FNDFLUPL>,打开上传文件页面: (2).从表fnd_lob_access和fnd_lobs中取出文件名放在form画面上: 2. 对dbms_lob中的二进制文件进行处理 (1).通过dbms_lob.converttoclob将二进制文件转换成字符文件: (2).通过dbms_lob.instr和dbms_lob.substr在字符文件获取字符串记录: 3. 对获取资料放入

Web大文件(夹)上传(断点续传)控件-Xproer.HttpUploader6

版权所有 2009-2017荆门泽优软件有限公司 保留所有权利 官方网站:http://www.ncmem.com/ 产品首页:http://www.ncmem.com/webapp/up6.2/index.asp 在线演示:http://www.ncmem.com/products/up6.3/index.htm 产品介绍:http://www.cnblogs.com/xproer/archive/2012/10/26/2741264.html 升级日志:http://www.cnblogs.

MP3文件上传UPLOAD控件点击上传部分代码

if (TxtName.Text != null && TxtPublish.Text != null) { SqlConnection myConn = GetCon(); myConn.Open(); ////上传音乐文件的变量 string FilePathMusic = string.Empty;//上传音乐文件的路径 string FileNameMusic = string.Empty;//上传音乐文件名 string FileExtendMusic = string.Empt

上传附件控件的浏览器兼容问题检查

关于浏览器兼容性的问题. 关于这方面要考虑的的几个方面: 1.  附件大小,格式 2.  Js是否禁用 3.  什么浏览器,哪个版本 4.项目引用的上传控件支持什么版本,比如flash版本,或支持html5页面 PS:背景: 跟踪客户一个问题,在本地验证没有发现问题后,怀疑是兼容性问题,在平时如果客户有问题,都是有运维人员联系并反馈到测试.但情况特殊,直接把客户的手机号码给我了. 上面4点是我觉得向客户咨询时需要获取的信息.