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

时间:2013-12-12 16:46:23

标签: javascript visual-studio-2012 winjs

我正在使用VS2012和Javascript

开发一个metro应用程序

我想重置文件输入的内容:

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

我该怎么做?

28 个答案:

答案 0 :(得分:289)

@ dhaval-marthak在评论中发布的jQuery解决方案显然有效,但如果你看看实际的jQuery调用,很容易看到jQuery正在做什么,只需将value属性设置为空字符串。所以在“纯粹的”JavaScript中它将是:

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

答案 1 :(得分:75)

您需要将<input type = “file”>打包到<form>代码中,然后您可以通过重置表单来重置输入:

onClick="this.form.reset()"

答案 2 :(得分:59)

这是最佳解决方案:

input.value = ''

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

在这里的所有答案中,这是最快的解决方案。没有输入克隆,没有表单重置!

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

答案 3 :(得分:38)

您可以克隆它并将其替换为自身,所有事件仍然附加:

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

var input = $("#control");

function something_happens() {
    input.replaceWith(input.val('').clone(true));
};

谢谢:Css-tricks.com

答案 4 :(得分:36)

如果您有以下内容:

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

然后就这样做:

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

重置文件控件。

答案 5 :(得分:33)

另一种解决方案(不选择HTML DOM元素)

如果你添加了&#39;更改&#39;在该输入上的事件监听器,然后在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.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.');
  }

答案 6 :(得分:28)

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

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

样本

请参阅this jsFiddle以获取代码和演示。

LINKS

有关详细信息,请参阅How to reset file input with JavaScript

答案 7 :(得分:20)

使用纯JavaScript

重置文件上传按钮非常简单

有几种方法可以做到这一点,但在许多浏览器中运行良好的必须直接的方法是将字段值更改为空,这样上传字段被重置,也尝试使用纯javascript而不是任何框架,我在下面创建了代码,只需检查一下(ES6):

&#13;
&#13;
function resetFile() {
  const file = document.querySelector('.file');
  file.value = '';
}
&#13;
<input type="file" class="file" />
<button onclick="resetFile()">Reset file</button>
&#13;
&#13;
&#13;

答案 8 :(得分:9)

我用于vuejs

   <input
          type="file"
          ref="fileref"
          @change="onChange"/>

this.$refs.fileref.value = ''

答案 9 :(得分:7)

重置输入文件非常单一

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

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

此示例适用

选择器例如是$('input[type=text]')

形式的任何元素

活动 clickchange或任何活动

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

答案 10 :(得分:6)

我想念这里的另一个解决方案 (2021): 我使用 FileList 与文件输入进行交互。

由于无法创建 FileList 对象,所以我使用 DataTransfer,它带来了干净的 FilleList。

我重置它:

  file_input.files=new DataTransfer().files  

就我而言,这非常合适,因为我仅通过 FileList 与封装的文件输入元素进行交互。

答案 11 :(得分:5)

使用 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"/>

答案 12 :(得分:4)

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

答案 13 :(得分:3)

使用angular您可以创建模板变量并将其值设置为null

<input type="file" #fileUploader />
<button (click)="fileUploader.value = null">Reset from UI</button>

或者您可以创建一种方法来重置

component.ts

  @ViewChild('fileUploader') fileUploader:ElementRef;

  resetFileUploader() { 
    this.fileUploader.nativeElement.value = null;
  }

模板

<input type="file"/>
<button (click)="resetFileUploader()">Reset from Component</button>

stackblitz demo

答案 14 :(得分:3)

<input type="file" id="mfile" name="mfile">
<p>Reset</p>

<script>
$(document).ready(function(){
$("p").click(function(){

            $("#mfile").val('');
            return false;

    });
});

答案 15 :(得分:3)

尤其对于Angular

document.getElementById('uploadFile').value = "";

会工作,但是如果您使用Angular 它将显示“属性'value'在类型'HTMLElement'.any上不存在”

document.getElementById()返回HTMLElement类型,该类型不包含value属性。因此,将其转换为HTMLInputElement

(<HTMLInputElement>document.getElementById('uploadFile')).value = "";

答案 16 :(得分:3)

只需使用:

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

答案 17 :(得分:2)

您无法重置,因为它是只读文件。你可以克隆它来解决问题。

答案 18 :(得分:2)

你应该试试这个:

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

答案 19 :(得分:2)

这可以像这样

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>

答案 20 :(得分:1)

我遇到了ng2-file-upload的角度问题。如果您要寻找角度解决方案,请参考以下代码

HTML:

<input type="file" name="myfile" #activeFrameinputFile ng2FileSelect [uploader]="frameUploader" (change)="frameUploader.uploadAll()" />

组件

import { Component, OnInit, ElementRef, ViewChild } from '@angular/core';

@ViewChild(' activeFrameinputFile ') InputFrameVariable : ElementRef;

this.frameUploader.onSuccessItem = (item, response, status, headers) => {

`this.`**InputFrameVariable**`.nativeElement.value = '';`

};

答案 21 :(得分:1)

jQuery解决方案:

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

答案 22 :(得分:1)

有很多方法,我建议输入引用附件。

<input
    id="image"
    type="file"
    required
    ref={ref => this.fileInput = ref}
    multiple
    onChange={this.onFileChangeHandler}
/>

提交后清除价值。

this.fileInput.value = "";

答案 23 :(得分:0)

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

如果使用boostrap,jquery,filestyle来显示输入文件格式:

$("#"+idInput).filestyle('clear');

答案 24 :(得分:0)

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>

答案 25 :(得分:0)

我的最佳解决方案

$(".file_uplaod_input").val('');  // this is working best ):

答案 26 :(得分:0)

也适用于动态控件。

的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 !!');
        }
    });

});

答案 27 :(得分:0)

var fileInput = $('#uploadCaptureInputFile');
fileInput.replaceWith(fileInput.val('').clone(true));