我想清除我的表单中的文件输入。
我知道如何用同样的方法设置资源……但该方法不会擦除所选文件路径。
注意:我希望避免重新加载页面、重置表单或执行AJAX调用。
这可能吗?
我想清除我的表单中的文件输入。
我知道如何用同样的方法设置资源……但该方法不会擦除所选文件路径。
注意:我希望避免重新加载页面、重置表单或执行AJAX调用。
这可能吗?
当前回答
上述答案提供了一些笨拙的解决方案,原因如下:
我不喜欢必须先包装输入,然后得到html,这是非常复杂和肮脏的。 跨浏览器JS很方便,似乎在这种情况下,有太多的未知可靠地使用类型切换(这,再次,有点脏)和设置值为“
因此,我为您提供了基于jQuery的解决方案:
$('#myinput').replaceWith($('#myinput').clone())
它说什么就做什么,它用自己的克隆来替换输入。克隆文件不会被选中。
优点:
简单易懂的代码 没有笨拙的包装或类型切换 跨浏览器兼容性(如果我说错了请指正)
结果: 快乐的程序员
其他回答
我也有同样的问题,我想出了这个。
var file = document.querySelector('input'); var emptyFile = document.createElement('input'); emptyFile。Type = 'file'; document.querySelector(“按钮”)。Onclick = function(){ 文件。文件= emptyFile.files; } <输入类型=“文件”> < >按钮明确> < /按钮
上述答案提供了一些笨拙的解决方案,原因如下:
我不喜欢必须先包装输入,然后得到html,这是非常复杂和肮脏的。 跨浏览器JS很方便,似乎在这种情况下,有太多的未知可靠地使用类型切换(这,再次,有点脏)和设置值为“
因此,我为您提供了基于jQuery的解决方案:
$('#myinput').replaceWith($('#myinput').clone())
它说什么就做什么,它用自己的克隆来替换输入。克隆文件不会被选中。
优点:
简单易懂的代码 没有笨拙的包装或类型切换 跨浏览器兼容性(如果我说错了请指正)
结果: 快乐的程序员
在我的世界里,一个简单干净的解决方案是,将文件输入文件设置为一个清晰的FileList。
编辑:正如SteJ所说,这不是与Safari合作。
由于我们不能直接创建FileList - I用户DataTransfer作为“hack”
@$input[0].files=new DataTransfer().files
or
file_input_node.files=new DataTransfer().files
有3种方法用javascript清除文件输入:
将value property设置为空或空。 适用于IE11+和其他现代浏览器。 创建一个新的文件输入元素并替换旧的输入元素。 缺点是您将失去事件侦听器和expando属性。 通过form. Reset()方法重置所有者表单。 为了避免影响同一所有者表单中的其他输入元素,我们可以创建一个新的空表单,并将文件输入元素附加到这个新表单并重置它。这种方法适用于所有浏览器。
我写了一个javascript函数。演示:http://jsbin.com/muhipoye/1/
function clearInputFile(f){
if(f.value){
try{
f.value = ''; //for IE11, latest Chrome/Firefox/Opera...
}catch(err){ }
if(f.value){ //for IE5 ~ IE10
var form = document.createElement('form'),
parentNode = f.parentNode, ref = f.nextSibling;
form.appendChild(f);
form.reset();
parentNode.insertBefore(f,ref);
}
}
}
帮助我的是,我尝试使用循环获取和上传最后选择的文件,而不是清除队列,它工作。这是代码。
for (int i = 0; i <= Request.Files.Count-1; i++)
{
HttpPostedFileBase uploadfile = files[i];
Stream fs = uploadfile.InputStream;
BinaryReader br = new BinaryReader(fs);
Byte[] imageBytes = br.ReadBytes((Int32)fs.Length);
}
希望这能对你有所帮助。