如何重置<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]')
或表单的任何元素
事件 click
, change
或任何事件
$('body').delegate('event', 'selector', function(){ $('input[type=file]').val(null) ; });
您应该重置包含文件input元素的表单
$('#formId').get(0).reset();
这将重置表单中的所有元素
只需使用这个来使input文件为空:
$('#uploadCaptureInputFile').val('');