<input type =“ file”>をリセットする方法


401

VS2012とJavascriptを使用してMetroアプリを開発しています

ファイル入力の内容をリセットしたい:

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

どうすればいいですか?


1
コンテンツとはどういう意味ですか?
Maess

3
つまり、ユーザーがファイルを選択した後、選択したファイルを「何もない」にリセットしますか?
ddavison 2013


14
そうです単純なことをinputElement.value = ""示唆してクローニングまたはラッピングに頼ることなくうまくトリックを行います。CH(46)、IE(11)及びFF(41)で動作
ロバートKoritnik

回答:


372

@ dhaval-marthakがコメントに投稿したjQueryソリューションは明らかに機能しますが、実際のjQuery呼び出しを見ると、value属性を空の文字列に設定するだけで、jQueryの動作を簡単に確認できます。したがって、「純粋な」JavaScriptでは次のようになります。

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

15
ありがとう!とにかくすでにjquery参照がある場合、$ input.val( "")は通常どおり機能します。
ナタン

@ 2ndGABうーん...私は45.0.1しか持っていないので、テストできません...他の誰か?
ジョーダンカスパー

@ 2ndGAB修正、私のFirefoxは46.0.1に更新されましたが、このコードはまだ機能します。確認できますか?
ジョーダンカスパー

@jakerellaは奇妙です。私にとって、入力ファイルセレクターの値を設定すると、セキュリティ例外がトリガーされます。私が成功裏に使用した唯一のソリューションは$(#myfileselector).trigger('fileselect', [1, ""]);
fralbo

3
input.type = ''; input.type = 'file'; // enjoy
Maxmaxmaximus

81

あなたはラップする必要がある<input type = “file”>のでは<form>タグや、あなたがあなたのフォームをリセットすることにより、入力をリセットすることができます。

onClick="this.form.reset()"

7
これが正しい方法です。これはすべてのブラウザで機能し、不正なスクリプトがファイル入力の.valueをいじるのを防ぐためにブラウザが実装する保護と競合しません。
Eugene Ryabtsev 2016年

9
ちょっとクールですが、私には関係ありません。このフォームの他のフィールドもリセットされるからです。
Starwave

2
同様のjQueryソリューションが考えられます$("form").get(0).reset();.get(0)あなたが使用できるように、実際のフォーム要素を返しますreset()機能を。
teewuane 2018年

74

これが最良のソリューションです。

input.value = ''

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

ここでのすべての答えのうち、これが最速のソリューションです。入力クローンなし、フォームリセットなし!

私はそれをすべてのブラウザーでチェックしました(IE8のサポートさえあります)。


4
リセットする特別な理由はありinput.typeますか?値だけを設定する''と、期待どおりの結果が得られます。
Harshita Sethi 2017

onchangeMS Edgeでイベントが発生しますか?
ほとほと2017年

@hotohoto私は知らない、mac OSを持っている)
Maxmaxmaximus 2017年

1
これにはいくつかの賛成投票か何かが必要です。この答えを見つけるのに時間がかかりすぎました。これはIEで動作する唯一の方法です。
sch

input.value = ''は、IE11のコンソールに例外をスローします。ただし、input.typeのリセットは、すべてのブラウザーでエラーなしで機能します。
Miroslav Jasso


44

すべてのイベントをアタッチしたまま、クローンを作成してそれ自体を置き換えることができます。

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

そして

var input = $("#control");

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

ありがとう:Css-tricks.com


1
残念ながら、これは入力値をリセットしません。このjsFiddleを参照してください。より良い解決策については、この回答を参照してください。
Gyrocode.com 2015

1
@ Gyrocode.comこのjsFiddleは、リセット後に画像が2度アップロードされると機能しません。
Sarthak Singhal

2
@SarthakSinghal、残念ながら間違ったコードを書いたので、jsfiddle.net / cL1LooLeを実行する必要がありました
Roger Russel

2
@RogerRussel:まさに...私は、ある回答がどのようにして一度しか機能しないと言っているのか、自分自身に疑問を感じていました。これは、何らかの参照が失われていることを示す明確な指標です。最初に作成された入力参照が後で新しい入力要素に置き換えられたため、実際にはそうなっていました。
Robert Koritnik 2015年

1
value他の回答で同様のものをリセットするだけで、DOMを操作するよりもはるかに簡単に思えます。
CodeFinity

40

別の解決策(HTML DOM要素を選択しない場合)

その入力に「変更」イベントリスナーを追加した場合、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.');
  }


これは.、ファイル拡張子の前に1つだけを含むファイル名でのみ機能します。
Ma Kobi 2017

そうです、私はコードを編集し、ファイル拡張子を取得するためのより普遍的なアプローチを提供しました。
18年

31

解決

次のコードは、jQueryを使用して動作しました。すべてのブラウザで動作し、イベントとカスタムプロパティを保持できます。

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

デモ

コードとデモについては、このjsFiddleを参照してください。

リンク

詳細については、JavaScriptファイル入力をリセットする方法を参照してください。


1
@alessadro、いいえ、<input type="file">特定のIDを持つ要素のみです。
Gyrocode.com 2017年

回答を明確にしてくれてありがとう:) +1
キャンドルジャック2017年

1
これは、私が見つけた中で最もクリーンで最もブラウザに準拠したソリューションです-ありがとうございます。
Pat

25

純粋なJavaScriptを使用すると、ファイルのアップロードボタンをリセットするのがとても簡単です。です。

それを行うにはいくつかの方法がありますが、多くのブラウザでうまく機能している必要がある簡単な方法は、ファイルされた値を何も変更しないことです。そのため、アップロードされたファイルがリセットされ、フレームワークではなく純粋なJavaScriptを使用してみます。以下のコード、チェックしてください(ES6):

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


jqueryの使用方法
Anand Choudhary

1
@AnandChoudharyこれはjQuery内でも機能しますが、const file = document.querySelector( '。file');を置き換えることができます。const file = $( '。file'); または単に$( '。file')。val( ""); それを空にする
Alireza

18

特にAngular

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

動作しますが、Angularを使用すると、「プロパティ 'value'はタイプ 'HTMLElement'.anyに存在しません」と表示されます。

document.getElementById()は、valueプロパティを含まないタイプHTMLElementを返します。したがって、それをHTMLInputElementにキャストします

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

追加:-

ただし、角度でDOM操作(document.xyz())を使用しないでください。

そのために、angularは、それぞれdocument.querySelector()、document.queryselectorAll()である@ VIewChild、@ ViewChildrenなどを提供しています。

まだ読んでいません。専門家のブログをフォローする方が良い

この経るリンク1リンク2


アンギュラーを使わなくて良かったです!
user2677034

いいえ。FIxはそこにあります。私だけがこれを見つけました。あなたはどちらを使っていますか?
P Satish Patro、

申し訳ありませんが、皮肉なことになっていた...私は単にdocument.getElementById( 'uploadFile')。value = "";を使用しています。私は角張っていないので。
user2677034

良いですね。私は同じことを考えましたが、Angular / React / VUeを使用します。これらは、ルーティング、コンポーネント、サービス、DOM操作のオーバーライド実装のための強力なフレームワークです
P Satish Patro

14

私はvuejsに使用します

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

this.$refs.fileref.value = ''

2
ありがとう!私はvuejs:Dで解決策を見つけることは決してないと思っていました、あなたは私の日を怒らせています!
Zsoca

1
魅力のように働いた!ありがとう
F KING

8

リセット入力ファイルは非常に1つにあります

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

バインドする場合は、フォームの他のフィールドを変更してファイルをリセットするか、ajaxを使用してフォームをロードします。

この例は適用可能です

たとえばセレクタ$('input[type=text]')またはフォームの任意の要素

イベント clickchangeまたは任意のイベント

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

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


5

多くのアプローチがあり、入力へのrefアタッチメントを使用することをお勧めします。

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

送信後に値をクリアする。

this.fileInput.value = "";


4

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デモ


2

これは読み取り専用ファイルであるため、リセットできません。問題を回避するためにクローンを作成できます。



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>



1

jQueryソリューション:

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

それがどのように機能するかを説明するために、この回答を埋め込むことを検討してください。
バグ

@Bugsは、これがそれ自体を物語っていると思います。ファイル入力のon changeイベントがトリガーされると、値はクリアされます。入力のタイプは、なしからファイルにリセットされます。

2
@Jordyはい私はそれが何をするか知っています:)私はちょうどそれを際立たせようと試みる価値があるだろう他のダースの数で考えていました。私が見直している間にそれが現れました。彼らは実際にあなたのコメントをコピーして、もう少しそれを埋め込むことができます。コードがOPの問題を修正したと感じる理由を説明することは常に価値があります。
バグ

1

Angularの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 = '';`

};


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

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

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

    });
});


このコードは問題を解決する可能性がありますが、これが問題を解決する方法と理由の説明含めると、投稿の品質が向上し、おそらくより多くの投票が得られます。あなたが今尋ねている人だけでなく、あなたが将来の読者のための質問に答えていることを忘れないでください。回答を編集して説明を追加し、適用される制限と前提を示してください。口コミから
ダブルビープ音

0

フォームに複数のファイルがあり、そのうちの1つだけをリセットする場合:

boostrap、jquery、filestyleを使用して入力ファイル形式を表示する場合:

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

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

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

});

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>

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.