如何重置<input type =“file”>

我正在开发VS2012和Javascript的地铁应用程序

我想重置我的文件input的内容:

<input type="file" id="uploadCaptureInputFile" class="win-content colors" accept="image/*" /> 

我该怎么做?

@ dhaval-marthak在注释中显示的jQuery解决scheme显然是可行的,但是如果你看看实际的jQuery调用,很容易看出jQuery正在做什么,只需要将value属性设置为空string即可。 所以在“纯粹的”JavaScript中,它将是:

 document.getElementById("uploadCaptureInputFile").value = ""; 

您需要将<input type = “file”>包装到<form>标签中,然后通过重置表单来重置input:

 onClick="this.form.reset()" 

这是最好的解决scheme:

 input.value = '' if(!/safari/i.test(navigator.userAgent)){ input.type = '' input.type = 'file' } 

所有的答案在这里是最快的解决scheme。 没有input克隆,没有表格重置!

我在所有的浏览器(它甚至有IE8的支持)检查它。

您可以将其克隆并自行更换,并附上所有事件:

 <input type="file" id="control"> 

 var input = $("#control"); function something_happens() { input.replaceWith(input.val('').clone(true)); }; 

感谢:Css-tricks.com

如果您有以下情况:

 <input type="file" id="fileControl"> 

那么就做:

 $("#fileControl").val(''); 

重置文件控制。

下面的代码用jQuery工作。 它适用于每个浏览器,并允许保留事件和自定义属性。

 var $el = $('#uploadCaptureInputFile'); $el.wrap('<form>').closest('form').get(0).reset(); $el.unwrap(); 

DEMO

看到这个jsFiddle的代码和演示。

链接

有关更多信息,请参阅如何使用JavaScript重置文件input 。

另一个解决scheme(不selectHTML DOM元素)

如果您在该input中添加了“更改”事件侦听器,则可以在JavaScript代码中调用(对于某些指定的条件):

 event.target.value = ''; 

例如在HTML中:

 <input type="file" onChange="onChangeFunction(event)"> 

在JavaScript中:

 onChangeFunction(event) { let fileList = event.target.files; let file = fileList[0]; let extension = file.name.split('.')[1].toLowerCase(); if (extension === 'jpg') { alert('Good file extension!'); } else { event.target.value = ''; alert('Wrong file extension! File input is cleared.'); } 

随着IE 10我解决了这个问题:

  var file = document.getElementById("file-input"); file.removeAttribute('value'); file.parentNode.replaceChild(file.cloneNode(true),file); 

其中:

 <input accept="image/*" onchange="angular.element(this).scope().uploadFile(this)" id="file-input" type="file"/> 

只要使用:

 $('input[type=file]').val(''); 

你应该试试这个:

 $("#uploadCaptureInputFile").val(''); 

jQuery解决scheme:

  $('input').on('change',function(){ $(this).get(0).value = ''; $(this).get(0).type = ''; $(this).get(0).type = 'file'; }); 

你不能重置,因为它是一个只读文件。 你可以克隆它来解决问题。

如果您的表单中有多个文件,但只希望其中的一个被重置:

如果你使用boostrap,jquery,filestyle来显示input文件的forms:

 $("#"+idInput).filestyle('clear'); 
 var fileInput = $('#uploadCaptureInputFile'); fileInput.replaceWith(fileInput.val('').clone(true)); 

也适用于dynamic控制。

使用Javascript

 <input type="file" onchange="FileValidate(this)" /> function FileValidate(object) { if ((object.files[0].size / 1024 / 1024) > 1) { //greater than 1 MB $(object).val(''); } } 

JQuery的

 <input type="file" class="UpoloadFileSize"> $(document).ready(function () { $('.UpoloadFileSize').bind('change', function () { if ((this.files[0].size / 1024000) > 1.5) { //greater than 1.5 MB $(this).val(''); alert('Size exceeded !!'); } }); }); 

重置input文件是非常单一的

$('input[type=file]').val(null);

如果绑定在更改表单的其他字段中重置文件,或者使用ajax加载表单。

这个例子是适用的

例如, select器$('input[type=text]')或表单的任何元素

事件 clickchange或任何事件

 $('body').delegate('event', 'selector', function(){ $('input[type=file]').val(null) ; }); 

您应该重置包含文件input元素的表单

  $('#formId').get(0).reset(); 

这将重置表单中的所有元素

只需使用这个来使input文件为空:

  $('#uploadCaptureInputFile').val('');