`

清空文件上传控件的值

    博客分类:
  • JS
阅读更多

进行文件上传时,若文件格式正确,那么就需要清空文件上传控件的value,让重新上传。那是无论是用JS还是用jquery都无法清空value的值,因为

http://pengfeng.iteye.com/blog/756863 写道
在 HTML 文档中 ,<input type="file"> 标签是浏览器向服务器发送选中文件的。该元素有一个 value 属性,保存了用户指定的文件的名称,为安全起见,file-upload 元素的value 属性是只读的,不允许程序员修改它的值,并且HTML value 属性也会被忽略

但是有时候又的确需要置空该控件的value值。在网上搜罗了下,加上我自己的测试,差不多有以下几个方法:

1、使用replace方法,将文件上传控件的value替换成空。具体代码如下:

file_input_obj.outerHTML=file_input_obj.outerHTML.replace(/(value=\").+\"/i,"$1\"");

这个代码我测试过了,可以置空,通过F12可以看到,控件的value值的确置空了,但是若用JS或者jQuery去取该控件的值,还是会获取到置空前的值。所以,该方法若是只满足视觉效果还是可以的,实际判断是否为空应该是不行的。

 

以下转载的文章说到了两个方法:

转载链接:http://www.myexception.cn/web/2025234.html

转载内容:

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

方法一:
上传控件基础知识说明:
上传控件(<input type="file"/>)用于在客户端浏览并上传文件,用户选取的路径可以由value属性获取,但value属性是只读的,不能通过 javascript来赋值,这就使得不能通过value=""语句来清空它。很容易理解为什么只读,如果可以随意赋值的话,那么用户只要打开你的网页, 你就可以随心所欲的上传他电脑上的文件了,呵呵,毕竟表单的submi是可以随便调用的。

而上传控件又没有一个clear()之类的函 数,所以这使得无刷新上传文件显得稍稍不爽,尤其对于追求完美的开发者而言。然而今天在做一个Asp.net控件时却发现不得不需要清空一下上传控件,于 是便开始想办法。网上搜索一番,不出所料,没有找到什么结果。关键时刻只能靠自己了。

仔细想想,上传控件是不是任何时候都不可能被清空 呢?答案是否,form.reset()方法能够重置所有得表单元素。只要调用inputFile.form.reset(),那么上传控件的值就清空 了,不要担心它被恢复为某个默认值,value是只读的,你不能为它设置某个初始值。

于是开始设想,如果我只需要reset一下上传控 件,怎么解决?其他的表单元素要保持原状。一个可行的方法是,reset之前获取所有的表单域的值,之后再用这些值填充,虽然显得稍微复杂,但借助 prototype框架的Form对象提供的方法,还是很容易做到的。这样就能够得到需要的结果了。

然而这个方法还是不够优雅,沿着思路 继续想下去,不难得到改进的方法:创建一个新的form,把上传控件临时放过来,再调用这个form的reset方法,完工之后再把上传控件弄回去。这个 form无需进入DOM结构便能正常工作,所以不用担心会对界面有任影响。下面给出函数实现,经过验证工作良好,呵呵。

function clearFileInput(file){
    var form=document.createElement(&#39form');
    document.body.appendChild(form);
    //记住file在旧表单中的的位置
    var pos=file.nextSibling;
    form.appendChild(file);
    form.reset();
    pos.parentNode.insertBefore(file,pos);
    document.body.removeChild(form);
}

 方法二:比较简单了 重新建立个 file 就可以了。

 <span   id=span1>  
 	<input   name=ab   type=file>  
 </span>  
 <input   name=button1   type=button   value="按"   onclick=show()>  
 <script   language=javascript>  
 function  show(){  
	 document.getElementById("span1").innerHTML="<input   name=ab   type=file>";  
 }  
 </script>

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

上面两个方法总结起来就是:

2、重置表单:

使用重置的方法,从理论上来讲是可以行的,但是打击面是不是太广,要是表单中的东西较少还行,要是太多就会有点麻烦

 

3、重新新建,进行替换:

文件上传控件检测到选了文件之后,判断是否有效,要是无效,直接新建或克隆一个type='file'的input,然后直接替换。我已经测试过该方法可行,且一对一,不会影响到别的控件和功能

 

4、采用视觉效果:

 如前面写的实现单图片预览的一样,写三个input,一个text文本框,用来展示文件路径;一个button,用来表示“浏览”按钮,一个type=file的input,用来实现真正的上传。再使用CSS,将前面两个文本框覆盖掉第三个上传控件,这样子在视觉上看起来还是一个文件上传控件,代码如下:

<input type='text' name='textfield' id='textfield' class='systext' /> <!--文本框,用来显示上传的文件路径-->   
<input type='button' class='but uploadbtn' value='浏览...' /><!--浏览按钮-->  
<input type="file" name="applogo" class="file" size="28"/> <!--真正的浏览按钮,用来打开上传页面,前面的“浏览”按钮掩盖此按钮,为好看-->
在文件上传控件上添加onchange事件,选择完文件之后触发该事件。该事件直接从file的input中取值,赋值到第一个文本框中用来展示文件路径,以后的校验、判断是否为空都从第一个文本框取值,清空也只是清空第一个文本框的值。这样子就跟文件上传控件没有半毛钱关系了。不过有个缺点:太麻烦,东西多难维护。

 

综上,个人觉得最好的方法还是第三种:重新新建,进行替换。

分享到:
评论

相关推荐

    ntko文件上传控件

    NTKO大文件上传控件,采用多线程技术,提供专业的大文件上传解决方案。可以轻松迅速的将几百M甚至2G以下的文件上传到WEB服务器,并支持断点续传上载。上传到WEB服务器的文件,通过web服务器编程支持,还可以采用迅雷...

    Flash文件上传控件源码2012619

    Flash文件上传控件源码 功能介绍: 一个显示进度条的文件上传控件,兼容主流浏览器 同时实现了删除上传文件的功能。 开发环境为Visual Studio 2010

    jsf2.0 文件上传组件

    由于JSF2.0标准实现没有提供文件上传组件,而实际应用中很多时候需要上传文件,为了方便开发,我做了一个基于JSF2.0的文件上传组件,上传使用的是Apache 的commons-fileupload组件,我已经将commons-fileupload-...

    ASP多文件上传组件

    选择多个文件上传,显示上传速度,进度条,纯正的FLASH代码,使用的是HTTP协议,所以客户端,服务端都不需要安装任何组件 因为是模仿FORM表单提交,所以支持所有的网页动态语言:ASP PHP ASP.NET JSP等 添加了...

    ntko大文件上传

    大文件上传demo,注意需要联网使用,在这个demo中,先给数据库插入文件的基本信息和临时文件名称,再读取文件,建立临时文件夹,将文件存到临时文件中,最后当文件上传完成后,会修改数据库的临时文件名称,删除磁盘...

    extjs 4.2 多文件上传

    用Ext编写的多文件上传组件,已封装。 支持多文件上传,文件下载,文件删除,

    多文件上传 源码

    能够实现多个文件同时上传,且富有进度条,可停止,可删除

    swfupload+ajax实现多文件上传下载删除并将上传文件上传到数据库

    swfupload+ajax实现多文件上传下载删除并将上传文件上传到数据库 带数据库脚本,可以作为单独的上传控件使用,这是在公司要求下开发的上传下载控件

    ACUpload应用上传组件支持单文件上传多文件上传删除等操作

    AC-Upload:应用上传组件,支持单文件上传、多文件上传、删除等操作

    带进度条免组件全功能文件上传和管理系统 1.0

    把系统文件放置在支持ASP的网站空间,不用注册组件,便可实现文件快速上传和...管理模块包含对已上传文件浏览、搜索、修改、删除、数据库压缩等功能;设置模块让您决定系统权限,包含上传允许类型、大小、保存方式等

    Ext2.0 文件上传组件

    NULL 博文链接:https://jungh.iteye.com/blog/940900

    多文件上传组件1.0.6 bate 版

    多文件上传组件 temp.html 上传调用实例 update_.swf 上传FLASH文件 update.asp 接收示例 ASP版 update.php 接收示例 php版 详情访问 http://www.access2008.cn/update/ -------------------- 历史更新 ---...

    js 实现 上传控件内容清空

    js 实现 上传控件内容清空! 值得下载看看!资源免费,大家分享!!

    jQuery File Upload 图片上传组件,支持多文件上传、取消、删除,上传前缩略图预览、列表显示

    jQuery File Upload 是一个 jQuery 图片上传组件,支持多文件上传、取消、删除,上传前缩略图预览、列表显示图片大小,支持上传进度条显示;支持各种动态语言开发的服务器端。 1、多文件上传: 允许一次选择多个文件...

    批量上传、断点续传 上传组件

    3、你可以设定文件上传到服务器后的存放路径。 4、设置不允许上传的文件的扩展名。 5、上传过程中,进度条实时提示进度。并可以显示每个上传文件的详细进度信息。 6、上传过程中,点击取消按钮,即可删除正在...

    asp实现无组件多文件上传

    asp里面实现无组件的多文件的上传。实现对服务器端目录的增加、删除、重命名功能。超级强大!

    文件批量上传客户端免费组件 v1.0.6 for PHP

    选择多个文件上传,显示上传速度,进度条,纯正的FLASH代码,使用的是HTTP协议,所以客户端,服务端都不需要安装任何组件 因为是模仿FORM表单提交,所以支持所有的网页动态语言:ASP PHP ASP.NET JSP等 1.0.6 bate ...

    使用layui实现多文件列表上传

    该代码完整的实现了shiyonglayui技术实现多文件的上传预览和删除功能,下载下来直接导入到开发工具中就可以使用

    多文件上传jquery组件

    多文件上传jquery组件,支持多文件选择,删除。上传

    Asp用大文件上传控件(不占内存)附带Sleep函数

    '用户关闭或者停止上传窗口了,删除文件,避免留下垃圾 dim objFile set objFile=Server.CreateObject("Scripting.FileSystemObject") if objFile.FileExists(AppendFile.FileName) then Base.Sleep ...

Global site tag (gtag.js) - Google Analytics