<입력 유형 =“파일”>을 재설정하는 방법


400

VS2012 및 Javascript로 메트로 앱을 개발 중입니다.

파일 입력 내용을 재설정하고 싶습니다 :

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

어떻게해야합니까?


1
내용이 무슨 뜻입니까?
Maess December

3
사용자가 파일을 선택한 후 선택한 파일을 "nothing"으로 재설정 하시겠습니까?
ddavison


14
보인다 간단한이 있음을 inputElement.value = ""제안 복제 또는 포장에 의지하지 않고 잘 트릭을 수행합니다. CH (46), IE (11)과 FF의 작품 (41)
로버트 Koritnik

답변:


371

주석에 @ dhaval-marthak이 게시 한 jQuery 솔루션은 분명히 작동하지만 실제 jQuery 호출을 보면 jQuery가 수행중인 작업을 쉽게 볼 수 value있습니다. 속성을 빈 문자열로 설정하면 됩니다. 따라서 "순수한"JavaScript에서는 다음과 같습니다.

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

15
감사! 어쨌든 jquery 참조가 이미 있으면 $ input.val ( "")이 정상적으로 작동합니다.
Natan

@ 2ndGAB 흠 ... 45.0.1 만 가지고 있으므로 테스트 할 수 없습니다 ... 다른 사람이 있습니까?
Jordan Kasper

@ 2ndGAB Correction, My Firefox가 방금 46.0.1로 업데이트 되었으며이 코드는 여전히 작동합니다. 확인 할수 있어요?
Jordan Kasper

이상한 점은 @jakerella입니다. 입력 파일 선택기 값을 설정하면 보안 예외가 발생합니다. 내가 성공적으로 사용하는 유일한 솔루션은$(#myfileselector).trigger('fileselect', [1, ""]);
fralbo

3
input.type = ''; input.type = '파일'; // enjoy
Maxmaxmaximus

81

당신은 포장 필요 <input type = “file”><form>태그와 당신은 당신의 양식을 재설정하여 입력을 재설정 할 수 있습니다 :

onClick="this.form.reset()"

7
이것이 올바른 방법입니다. 모든 브라우저에서 작동하며 악성 스크립트가 파일 입력의 .value로 엉망이되는 것을 방지하기 위해 브라우저가 구현하는 보호와 충돌하지 않습니다.
유진 Ryabtsev

9
나를 위해서가 아니라 Kinda cool 은이 양식의 다른 필드를 재설정하기도합니다.
Starwave

2
비슷한 jQuery 솔루션이 될 수 있습니다 $("form").get(0).reset();. 은 .get(0)당신이 사용할 수 있도록 실제 양식 요소를 반환합니다 reset()기능을.
teewuane

74

이것이 가장 좋은 해결책입니다.

input.value = ''

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

여기에있는 모든 대답 중 가장 빠른 해결책입니다. 입력 복제본 없음, 양식 재설정 없음!

모든 브라우저에서 확인했습니다 (IE8도 지원합니다).


4
재설정해야 할 특별한 이유가 input.type있습니까? 값만 설정 ''하면 예상 결과가 나타납니다.
Harshita Sethi 2016

onchangeMS Edge에서 이벤트가 발생합니까 ?
hotohoto

@ hotohoto, 난 모르겠다, 맥 OS가있다)
Maxmaxmaximus

1
이것은 약간의 공감이나 무언가가 필요합니다.이 답변을 찾기 위해 너무 오래 걸렸습니다. 이것은 IE에서 작동하는 유일한 것입니다.
sch

input.value = ''는 IE11에서 콘솔에 예외를 발생시킵니다. 그러나 input.type 재설정은 모든 브라우저에서 오류없이 작동합니다.
Miroslav Jasso

45

다음과 같은 경우 :

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

그런 다음 그냥하십시오 :

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

파일 컨트롤을 재설정합니다.


6
최고의 솔루션 IMHO.
Serhii Maksymchuk

3
또는 DOM을 사용하십시오 :inputFileEl.value = '';
Ninh Pham

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

1
@ Gyrocode.com이 jsFiddle은 재설정 후 이미지가 두 번째로 업로드되면 작동하지 않습니다.
Sarthak Singhal

2
@SarthakSinghal은, 불행하게도 당신은 했어야 잘못된 코드를 작성 jsfiddle.net/cL1LooLe
로저 러셀

2
@RogerRussel : 정확히 ... 나는 어쨌든 상단 답변이 한 번만 작동한다고 말하는 것이 궁금했습니다. 이는 일종의 참조가 손실되고 있음을 나타내는 명확한 지표입니다. 실제로 처음에 입력 참조를 만든 후 나중에 새 입력 요소로 대체했기 때문에 실제로 그런 경우였습니다.
Robert Koritnik

1
value다른 답변 에서처럼 재설정하는 것은 DOM을 조작하는 것보다 훨씬 간단합니다.
CodeFinity

40

다른 솔루션 (HTML DOM 요소를 선택하지 않고)

해당 입력에 'change'이벤트 리스너를 추가 한 경우 Javascript 코드에서 (일부 지정된 조건에 대해) 호출 할 수 있습니다.

event.target.value = '';

예를 들어 HTML에서 :

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

그리고 자바 스크립트에서 :

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

angular2의 또 다른 방법 : stackoverflow.com/questions/40165271/…
Belter

.파일 확장자 앞에 하나만 포함 된 파일 이름에서만 작동 합니다.
Ma Kobi

맞습니다. 코드를 편집하고 파일 확장명을 얻는보다 보편적 인 접근 방식을 제공했습니다.
18:15:28에 indreed

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

감사합니다 답변을 명확히하십시오 :) +1
candlejack

1
이것은 내가 찾은 가장 깨끗하고 브라우저와 호환되는 솔루션입니다. 감사합니다.
Pat

25

순수한 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'). val ( ""); 비우기
Alireza

18

특히 Angular의 경우

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

작동하지만 Angular를 사용하면 "HTMLElement'.any 유형에"Property 'Property'가 없습니다 "라고 표시됩니다.

document.getElementById ()는 값 속성이 포함되지 않은 HTMLElement 유형을 반환합니다. 따라서 HTMLInputElement로 캐스트하십시오.

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

엑스트라 :-

그러나 DOM 조작 (document.xyz ())을 각도로 사용해서는 안됩니다.

이를 위해 각도는 각각 document.querySelector (), document.queryselectorAll () 인 @VIewChild, @ViewChildren 등을 제공했습니다.

나는 그것을 읽지 못했습니다. 전문가의 블로그를 따르는 것이 좋습니다

이를 통해 이동 링크 1 , 링크 2


각도를 사용할 필요가 없습니다.
user2677034

아니요. FIx가있을 것입니다. 나만 찾았 어 그때 당신은 어느 것을 사용하고 있습니까?
P Satish Patro

죄송합니다, 냉소적이었습니다 ... 그냥 document.getElementById ( 'uploadFile'). value = ""; 각도를 사용하지 않기 때문에.
user2677034

좋은데 나는 똑같이 생각했지만 Angular / React / VUe를 사용하십시오. 라우팅, 컴포넌트, 서비스, 돔 조작 무시 구현을위한 강력한 프레임 워크입니다.
P Satish Patro

14

나는 vuejs에 사용

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

this.$refs.fileref.value = ''

2
고마워요! 나는 vuejs : D로 해결책을 찾지 못할 것이라고 생각했다.
Zsoca

1
매력처럼 일했다! 감사합니다
F KIng

8

재설정 입력 파일이 매우 단일

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

바인드하면 양식의 다른 필드를 변경하여 파일을 재설정하거나 양식을 ajax로로드하십시오.

이 예는 적용 가능합니다

예를 들어 선택기$('input[type=text]') 는 양식의 모든 요소입니다.

이벤트 click , change또는 어떤 경우

$('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

많은 접근 방식이 있으며 입력에 참조 첨부 파일을 사용하는 것이 좋습니다.

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

제출 후 가치를 지우십시오.

this.fileInput.value = "";


4

각도를 사용하면 템플릿 변수를 만들고 값을 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';
            });

작동 방식을 설명하기 위해이 답변을 채우십시오.
Bug

@ 버그는 이것이 그 자체를 의미한다고 생각합니다. 파일 입력 on change이벤트가 트리거되면 값이 지워집니다. 입력 유형이 없음에서 파일로 재설정됩니다.

2
@ Jordy yes 나는 그것이 무엇인지 알고 있습니다. 내가 검토하는 동안 나타납니다. 그들은 실제로 당신의 의견을 복사하여 그것을 조금 더 채울 수 있습니다. 코드가 OP 문제를 해결한다고 생각하는 이유를 설명하는 것이 좋습니다.
버그

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

};


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

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

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

    });
});


이 코드가 문제를 해결하는 방법과 이유에 대한 설명포함 하여 질문을 해결할 수는 있지만 게시물의 품질을 향상시키는 데 도움이되며 더 많은 투표를 할 수 있습니다. 지금 질문하는 사람 만이 아니라 앞으로 독자들에게 질문에 대답하고 있음을 기억하십시오. 제발 편집 설명을 추가하고 제한 및 가정이 적용 무엇의 표시를 제공하는 답변을. 검토에서
이중 신호음

0

양식에 여러 파일이 있지만 그 중 하나만 재설정하려는 경우 :

boostrap, jquery, filestyle을 사용하여 입력 파일 양식을 표시하는 경우 :

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

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

0

동적 컨트롤에서도 작동합니다.

자바 스크립트

<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.