进行文件上传时,若文件格式正确,那么就需要清空文件上传控件的value,让重新上传。那是无论是用JS还是用jquery都无法清空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('form'); 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大文件上传控件是专门用于处理大文件上传的软件组件,对于Web应用程序的开发人员来说,它提供了一种高效、稳定且用户友好的解决方案。这个控件能够有效地解决传统HTTP上传方式在处理大文件时可能出现的问题,如...
NTKO大文件上传控件,采用多线程技术,提供专业的大文件上传解决方案。可以轻松迅速的将几百M甚至2G以下的文件上传到WEB服务器,并支持断点续传上载。上传到WEB服务器的文件,通过web服务器编程支持,还可以采用迅雷...
《Flash文件上传控件源码2012619》是针对Web应用程序开发的一款实用工具,主要用于实现文件上传功能,特别强调了进度条显示和文件删除操作。这个控件利用Flash技术,确保在多种主流浏览器上的兼容性,提供用户友好的...
FTP控件是软件开发中用于实现文件上传和下载功能的重要组件,尤其在处理大文件,如1GB以上的大文件时,其性能和稳定性显得尤为重要。本文将深入探讨FTP控件的功能、工作原理以及如何实现超大文件的断点续传。 FTP...
"Ext2.0 文件上传组件"是一个用于Web应用程序的组件,它允许用户在浏览器中方便地上传文件。这个组件基于Ext JavaScript库的2.0版本,Ext是一个强大的前端开发框架,提供了丰富的用户界面组件和数据管理功能。在本文...
10. **用户界面优化**:为了让用户有更好的交互体验,上传界面应清晰展示文件上传进度、状态和操作选项,如暂停、恢复、删除等。 综上所述,这个"多文件上传 源码"涵盖了文件选择、读取、包装、异步上传、进度追踪...
Java文件上传组件包(FileUpload)是Apache软件基金会的一个开源项目,主要负责处理HTTP协议中的文件上传功能。这个组件在Web应用开发中扮演着重要角色,尤其在处理用户通过表单上传大文件时,提供了高效且灵活的...
由于JSF2.0标准实现没有提供文件上传组件,而实际应用中很多时候需要上传文件,为了方便开发,我做了一个基于JSF2.0的文件上传组件,上传使用的是Apache 的commons-fileupload组件,我已经将commons-fileupload-...
大文件上传demo,注意需要联网使用,在这个demo中,先给数据库插入文件的基本信息和临时文件名称,再读取文件,建立临时文件夹,将文件存到临时文件中,最后当文件上传完成后,会修改数据库的临时文件名称,删除磁盘...
"文件上传与下载组件"是IT领域中一个关键的功能模块,尤其在Web应用程序中,它为用户提供了方便的数据交互方式。fileUpDo组件是专为此目的设计的,它集成了文件上传和下载的核心功能,使得开发者能够快速地在自己的...
选择多个文件上传,显示上传速度,进度条,纯正的FLASH代码,使用的是HTTP协议,所以客户端,服务端都不需要安装任何组件 因为是模仿FORM表单提交,所以支持所有的网页动态语言:ASP PHP ASP.NET JSP等 添加了...
删除文件功能通过`delectFile`方法实现,根据`keyID`来定位并移除`file`和`uploadFile`数组中的对应文件。此外,页面上还展示了一个上传按钮,通过点击触发自定义的上传逻辑,而不是依赖组件的自动上传。 手动上传...
本项目“JFrame文件上传Java_swing应用”是一个典型的Swing应用实例,包含了登录、文件上传、日期选择以及文件检索等常见功能,非常适合学习和自定义改造。 首先,我们来详细解析每个关键知识点: 1. **JFrame**:...
首先,VB中的文件上传通常与Web Forms或ASP.NET相关联,虽然这里提到的是VB,但可能指的是VBScript或者VB6,因为这些版本也支持文件上传功能。VBScript通常用于ActiveX控件或Classic ASP页面,而VB6则用于桌面应用...
文件上传下载组件可能还包含文件管理功能,比如删除、重命名、预览等。这些操作需要服务器端的接口支持,同时要确保对资源的访问控制,如权限验证和访问统计。 **7. 性能优化** 对于大文件上传,可能需要分块上传和...
EXT上传组件是一款基于Flash技术的前端文件上传工具,它提供了多文件上传的功能,极大地提升了用户在上传文件时的体验和效率。EXT是一个流行的JavaScript库,主要用于构建富客户端应用程序,而EXT上传组件是EXT库的...
ACUpload组件就是专为实现这一需求而设计的,它提供了丰富的功能,包括单文件上传、多文件上传以及文件删除等操作,极大地提升了用户体验。下面将详细探讨这些知识点。 1. **单文件上传**: 单文件上传是指用户...
在文件上传场景下,JavaBean组件通常包含文件上传所需的属性(如文件路径、文件名等)和方法(如上传、删除等)。 在JSP中使用文件上传JavaBean组件,一般需要以下步骤: 1. **创建JavaBean**:首先,我们需要创建...
用Ext编写的多文件上传组件,已封装。 支持多文件上传,文件下载,文件删除,
在ASP.NET中,文件上传主要依赖于`<asp:FileUpload>`控件。首先,在网页的HTML部分添加此控件,然后在服务器端处理文件上传。以下是一个简单的示例: ```html 上传" runat="server" OnClick="UploadButton_Click" ...