最近做的一个小功能,需要清空<input type="file">的值,但上传控件<input type="file">的值不能通过JavaScript来修改。
google找到这样一个解决方法:
在上传控件中插入了值,就只能通过form的reset功能来清空了,但是form里面其他的值也被reset了。
既然可以使用form的reset清空,那就有办法了:新建一个临时form,然后将需要清空的上传控件移入其中,reset之后,再移回原来所在位置,最后删除创建的临时form。js代码:
Js代码
- var Upload = {
- clear: function(id){
- var up = (typeof id=="string")?document.getElementById(id):id;
- if (typeof up != "object") return null;
- var tt = document.createElement("span");
- tt.id = "__tt__";
- up.parentNode.insertBefore(tt,up);
- var tf = document.createElement("form");
- tf.appendChild(up);
- document.getElementsByTagName("body")[0].appendChild(tf);
- tf.reset();
- tt.parentNode.insertBefore(up,tt);
- tt.parentNode.removeChild(tt);
- tt = null;
- tf.parentNode.removeChild(tf);
- },
- clearForm: function(){
- var inputs,frm;
- if (arguments.length == 0)
- {
- inputs = document.getElementsByTagName("input");
- }else{
- frm = (typeof arguments[0] == "string")?document.getElementById(arguments[0]):arguments[0];
- if (typeof frm != "object") return null;
- inputs = frm.getElementsByTagName("input");
- }
- var fs=[];
- for ( var i=0; i<inputs.length; i++ )
- {
- if (inputs[i].type == "file") fs[fs.length] = inputs[i];
- }
- var tf = document.createElement("form");
- for ( var i=0; i<fs.length; i++ )
- {
- var tt = document.createElement("span");
- tt.id = "__tt__" + i;
- fs[i].parentNode.insertBefore(tt, fs[i]);
- tf.appendChild(fs[i]);
- }
- document.getElementsByTagName("body")[0].appendChild(tf);
- tf.reset();
- for ( var i=0; i<fs.length; i++)
- {
- var tt = document.getElementById("__tt__" + i);
- tt.parentNode.insertBefore(fs[i],tt);
- tt.parentNode.removeChild(tt);
- }
- tf.parentNode.removeChild(tf);
- }
- }
var Upload = { clear: function(id){ var up = (typeof id=="string")?document.getElementById(id):id; if (typeof up != "object") return null; var tt = document.createElement("span"); tt.id = "__tt__"; up.parentNode.insertBefore(tt,up); var tf = document.createElement("form"); tf.appendChild(up); document.getElementsByTagName("body")[0].appendChild(tf); tf.reset(); tt.parentNode.insertBefore(up,tt); tt.parentNode.removeChild(tt); tt = null; tf.parentNode.removeChild(tf); }, clearForm: function(){ var inputs,frm; if (arguments.length == 0) { inputs = document.getElementsByTagName("input"); }else{ frm = (typeof arguments[0] == "string")?document.getElementById(arguments[0]):arguments[0]; if (typeof frm != "object") return null; inputs = frm.getElementsByTagName("input"); } var fs=[]; for ( var i=0; i<inputs.length; i++ ) { if (inputs[i].type == "file") fs[fs.length] = inputs[i]; } var tf = document.createElement("form"); for ( var i=0; i<fs.length; i++ ) { var tt = document.createElement("span"); tt.id = "__tt__" + i; fs[i].parentNode.insertBefore(tt, fs[i]); tf.appendChild(fs[i]); } document.getElementsByTagName("body")[0].appendChild(tf); tf.reset(); for ( var i=0; i<fs.length; i++) { var tt = document.getElementById("__tt__" + i); tt.parentNode.insertBefore(fs[i],tt); tt.parentNode.removeChild(tt); } tf.parentNode.removeChild(tf); } }
这个方法使用示例:
Html代码
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <title>test</title>
- <script type="text/javascript">
- <!--引入以上js代码--></script>
- </head>
- <body>
- <form name="testform" method="post">
- <input type="file" name="testfile" />
- <input type="button" value="clear" onclick="Upload.clear('testfile')" /><br />
- <input type="button" value="clearAll" onclick="Upload.clearForm()" /><br />
- <input type="submit" value="submit" /><input type="reset" value="reset" />
- </form>
- </body>
- </html>
相关推荐
### JavaScript获取和清空input type="file"值的知识点 #### 1. 获取input type="file"的值 `<input type="file">`元素允许用户选择一个或多个文件,这些文件的路径将通过其`value`属性返回。然而,需要注意的是,...
首先,我们来看如何获取`<input type="file">`的值。当用户选择了一个文件后,这个文件的信息会存储在`value`属性中,但这个属性是只读的,无法直接通过`value=""`来清空。下面是一个简单的示例,展示如何获取用户...
在JavaScript中,清除`<input type="file">`控件的值是一个相对复杂的问题,因为浏览器出于安全考虑,不允许直接修改或清空该类型的输入字段。通常,当用户选择了一个文件后,无法通过简单的JavaScript操作来重置这...
在进行Web开发的过程中,经常会遇到需要通过JavaScript清空`<input type="file">`上传控件中的文件选择值的需求。然而,根据HTML标准,`<input type="file">`控件的值是不允许通过JavaScript直接进行修改的。原因...
当用户点击按钮触发事件时,可以利用JavaScript删除原有的`<input type="file">`元素,并重新创建一个新的`<input type="file">`元素来替代它,从而达到清空文件选择的效果。 示例代码如下: ```html <span id=...
在JavaScript中,`<input type="file">`控件用于让用户选择本地文件,然后上传到服务器。这个控件有一些特殊性,比如其`value`属性是只读的,这意味着我们不能直接通过设置`value`来清空用户选择的文件。这是因为...
这种方法虽然能有效清空`<input type="file">`的值,但请注意,这样做并不会真正删除用户已选择的文件,只是从视觉上清空了控件。如果需要在用户重新选择文件之前阻止旧文件的上传,你需要在提交表单或发送文件到...
在网页开发中,File控件(`<input type="file">`)经常用于用户选择本地文件上传至服务器。然而,由于安全原因,浏览器通常不允许JavaScript直接修改File控件的value属性,以防止恶意脚本篡改用户选定的文件。本文将...
由于出于安全性考虑,JavaScript默认不允许直接修改`input`元素中的`file`类型的value值。但是,我们仍然有一些技巧性的方法可以用来实现这一目标。 首先,我们来看一下传统的方法,即通过替换HTML代码的方式。这种...
在HTML中,`<input type="file">`控件用于让用户选择本地文件进行上传,它在网页表单中扮演着重要角色。然而,在某些场景下,我们可能需要取消用户已经选择的文件,例如用户错误地选择了文件或者在上传之前想要重新...
在网页开发中,File输入控件(`<input type="file">`)是用户选择本地文件的一种常见方式。然而,由于浏览器的安全策略,JavaScript通常不能直接访问或修改File控件的选定文件路径,这是为了保护用户的隐私。但在...
代码示例使用了JavaScript来清空一个`file`类型的`<input>`元素的值。方法如下: 1. 通过`document.getElementById("myfile")`获取到`<input>`元素的DOM对象。这里的`myfile`应该是该`<input>`元素的id属性值。 2. ...
- **File上传标签**:通过`<input type="file">`标签实现文件上传功能,通常还需要后端服务的支持来接收和处理上传的文件。 - **Label标签**:使用`<label>`标签来为表单控件创建关联的文字说明,增强表单的可访问...
本文将通过示例代码介绍如何使用JavaScript来清空`input`元素中`type`属性值为`file`的值。 首先,要清楚的是,`<input type="file">`元素的值是由浏览器自动管理的。我们不能直接通过JavaScript设置这个值为空字符...
- **文件上传**(File input):`<input type="file">`,如`<input type="file" name="pic" />`,允许用户从本地选择一个文件上传。 - **文本区域**(Textarea):`<textarea>`,如`<textarea rows="5" cols="30">...
var element = '<input id="test" name="insect_file" type="file" multiple class="file-loading" data-show-caption="true"/>'; $("#div_insect_file").append(element); // 将 input 插入到容器中 ``` 3. **...
- `<input type="file">`:HTML中的文件输入控件,允许用户选择一个或多个文件进行上传。 - `enctype="multipart/form-data"`:设置表单的编码类型为`multipart/form-data`,这是必须的,因为它能够正确地传输文件...