JS清空上传控件input(type="file")的值的代码

作者:窗边听雨

时间:2026-10-23

浏览:350

本文介绍了一种在JavaScript中清空文件上传控件值的方法。由于直接操作input type=file受限,且form.reset()会重置整个表单,该方法通过动态创建临时form,将上传控件移入其中执行reset后移回原位,从而仅清空文件值而不影响其他表单字段。

文章目录

清空文件上传控件值的JavaScript实现

在Google搜索中找到了一个解决此问题的方案:


当文件上传控件中已插入值时,通常只能通过form的reset功能来清空。然而,这样做会导致表单内其他字段的值也被一并重置。


既然可以利用form的reset功能,我们可以采取以下策略:新建一个临时form,将需要清空的上传控件移入该临时form中,执行reset操作后再将其移回原来的位置,最后删除创建的临时form。具体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);
} 
} 
view plaincopy to clipboardprint?
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);
} 
}

1

2下一页阅读全文

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章