admin管理员组文章数量:1125710
I am developing a metro app with VS2012 and Javascript
I want to reset the contents of my file input:
<input type="file" id="uploadCaptureInputFile" class="win-content colors" accept="image/*" />
How should I do that?
I am developing a metro app with VS2012 and Javascript
I want to reset the contents of my file input:
<input type="file" id="uploadCaptureInputFile" class="win-content colors" accept="image/*" />
How should I do that?
Share Improve this question edited Sep 6, 2023 at 7:09 Satish Patro 4,3542 gold badges35 silver badges59 bronze badges asked Dec 12, 2013 at 16:46 JesusJesus 8,5764 gold badges30 silver badges40 bronze badges 9 | Show 4 more comments28 Answers
Reset to default 537The jQuery solution that @dhaval-marthak posted in the comments obviously works, but if you look at the actual jQuery call it's pretty easy to see what jQuery is doing, just setting the value
attribute to an empty string. So in "pure" JavaScript it would be:
document.getElementById("uploadCaptureInputFile").value = "";
You need to wrap <input type = “file”>
in to <form>
tags and then you can reset input by resetting your form:
onClick="this.form.reset()"
This is the BEST solution:
input.value = ''
if(!/safari/i.test(navigator.userAgent)){
input.type = ''
input.type = 'file'
}
Of all the answers here this is the fastest solution. No input clone, no form reset!
I checked it in all browsers (it even has IE8 support).
In case you have the following:
<input type="file" id="fileControl">
then just do:
$("#fileControl").val('');
to reset the file control.
Another solution (without selecting HTML DOM elements )
If you added 'change' event listener on that input, then in javascript code you can call (for some specified conditions):
event.target.value = '';
For example in HTML:
<input type="file" onChange="onChangeFunction(event)">
And in javascript:
onChangeFunction(event) {
let fileList = event.target.files;
let file = fileList[0];
let extension = file.name.match(/(?<=\.)\w+$/g)[0].toLowerCase(); // assuming that this file has any extension
if (extension === 'jpg') {
alert('Good file extension!');
}
else {
event.target.value = '';
alert('Wrong file extension! File input is cleared.');
}
You can just clone it and replace it with itself, with all events still attached:
<input type="file" id="control">
and
var input = $("#control");
function something_happens() {
input.replaceWith(input.val('').clone(true));
};
Thanks : Css-tricks.com
document.getElementById('uploadFile').value = "";
Will work, But if you use Angular It will say "Property 'value' does not exist on type 'HTMLElement'.any"
document.getElementById() returns the type HTMLElement which does not contain a value property. So, cast it into HTMLInputElement
(<HTMLInputElement>document.getElementById('uploadFile')).value = "";
EXTRA :-
However, we should not use DOM manipulation (document.xyz()) in angular.
To do that angular has provided @ViewChild, @ViewChildren, etc which are document.querySelector(), document.queryselectorAll() respectively.
Even I haven't read it. Better to follows expert's blogs
Go through this link1, link2
SOLUTION
The following code worked for me with jQuery. It works in every browser and allows to preserve events and custom properties.
var $el = $('#uploadCaptureInputFile');
$el.wrap('<form>').closest('form').get(0).reset();
$el.unwrap();
DEMO
See this jsFiddle for code and demonstration.
LINKS
See How to reset file input with JavaScript for more information.
Resetting a file upload button is so easy using pure JavaScript!
There are few ways to do it, but the must straightforward way which is working well in many browser is changing the filed value to nothing, that way the upload filed gets reset, also try to use pure javascript rather than any framework, I created the code below, just check it out (ES6):
function resetFile() {
const file = document.querySelector('.file');
file.value = '';
}
<input type="file" class="file" />
<button onclick="resetFile()">Reset file</button>
I miss an other Solution here (2021):
I use FileList
to interact with file input.
Since there is no way to create a FileList
object, I use DataTransfer
, that brings clean FilleList with it.
I reset it with:
file_input.files=new DataTransfer().files
In my case this perfectly fits, since I interact only via FileList
with my encapsulated file input element.
I use for vuejs
<input
type="file"
ref="fileref"
@change="onChange"/>
this.$refs.fileref.value = ''
The reseting input file is on very single
$('input[type=file]').val(null);
If you bind reset the file in change other field of the form, or load form with ajax.
This example is applicable
selector for example is $('input[type=text]')
or any element of the form
event click
, change
, or any event
$('body').delegate('event', 'selector', function(){
$('input[type=file]').val(null) ;
});
My Best Solution
$(".file_uplaod_input").val(''); // this is working best ):
There are many approaches and i will suggest to go with ref attachment to input.
<input
id="image"
type="file"
required
ref={ref => this.fileInput = ref}
multiple
onChange={this.onFileChangeHandler}
/>
to clear value after submit.
this.fileInput.value = "";
With IE 10 I resolved the problem with :
var file = document.getElementById("file-input");
file.removeAttribute('value');
file.parentNode.replaceChild(file.cloneNode(true),file);
where :
<input accept="image/*" onchange="angular.element(this).scope().uploadFile(this)" id="file-input" type="file"/>
Just use:
$('input[type=file]').val('');
document.getElementById("uploadCaptureInputFile").value = "";
With angular you can create a template variable and set the value to null
<input type="file" #fileUploader />
<button (click)="fileUploader.value = null">Reset from UI</button>
Or you can create a method to reset like this
component.ts
@ViewChild('fileUploader') fileUploader:ElementRef;
resetFileUploader() {
this.fileUploader.nativeElement.value = null;
}
template
<input type="file"/>
<button (click)="resetFileUploader()">Reset from Component</button>
stackblitz demo
<input type="file" id="mfile" name="mfile">
<p>Reset</p>
<script>
$(document).ready(function(){
$("p").click(function(){
$("#mfile").val('');
return false;
});
});
You can´t reset that since it is an read-only file. you can clone it to workaround the problem.
You should try this:
$("#uploadCaptureInputFile").val('');
I faced the issue with ng2-file-upload for angular. if you are looking for the solution in angular refer below code
HTML:
<input type="file" name="myfile"
#activeFrameinputFile ng2FileSelect [uploader]="frameUploader" (change)="frameUploader.uploadAll()" />
component
import { Component, OnInit, ElementRef, ViewChild } from '@angular/core';
@ViewChild('
activeFrameinputFile')
InputFrameVariable: ElementRef;
this.frameUploader.onSuccessItem = (item, response, status, headers) => {
`this.`**InputFrameVariable**`.nativeElement.value = '';`
};
This could be done like this
var inputfile= $('#uploadCaptureInputFile')
$('#reset').on('click',function(){
inputfile.replaceWith(inputfile.val('').clone(true));
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="file" id="uploadCaptureInputFile" class="win-content colors" accept="image/*" />
<a href="" id="reset">Reset</a>
jQuery solution:
$('input').on('change',function(){
$(this).get(0).value = '';
$(this).get(0).type = '';
$(this).get(0).type = 'file';
});
If you have several files in your form but only want one of them to be reset:
if you use boostrap, jquery, filestyle to display the input file form :
$("#"+idInput).filestyle('clear');
var fileInput = $('#uploadCaptureInputFile');
fileInput.replaceWith(fileInput.val('').clone(true));
Works for dynamic controls too.
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 !!');
}
});
});
function resetImageField() {
var $el = $('#uploadCaptureInputFile');
$el.wrap('<form>').closest('form').get(0).reset();
$el.unwrap();
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="file" id="uploadCaptureInputFile" class="win-content colors" accept="image/*" />
<button onclick="resetImageField()">Reset field</button>
本文标签: javascripthow to reset ltinput typequotfilequotgt in AngularStack Overflow
版权声明:本文标题:javascript - how to reset <input type = "file"> in Angular - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1736674911a1947127.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
inputElement.value = ""
does the trick just fine without resorting to cloning or wrapping as suggested. Works in CH(46), IE(11) and FF(41) – Robert Koritnik Commented Oct 23, 2015 at 21:37