<input type = "file"> nasıl sıfırlanır


401

VS2012 ve Javascript ile bir metro uygulaması geliştiriyorum

Dosya girdimin içeriğini sıfırlamak istiyorum:

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

Bunu nasıl yapmalıyım?


1
İçeriğe göre ne demek istiyorsun?
Maess

3
kullanıcı bir dosya seçtikten sonra, seçilen dosyayı "hiçbir şey" olarak sıfırlamak mı istiyorsunuz?
ddavison


14
o görünüyor basit olduğu inputElement.value = ""önerildiği gibi klonlama ya sarma başvurmadan gayet işe yarar. CH (46), IE (11) ve FF (41) 'de çalışır
Robert Koritnik

Yanıtlar:


372

@ Dhaval-marthak'ın yorumlarda yayınladığı jQuery çözümü açıkça işe yarıyor, ancak gerçek jQuery çağrısına bakarsanız, jQuery'nin ne yaptığını görmek oldukça kolaydır, sadece valueniteliği boş bir dizeye ayarlayarak . "Saf" JavaScript'te şöyle olur:

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

15
Teşekkürler! Zaten jquery referansınız varsa, $ input.val ("") her zamanki gibi çalışır.
Natan

@ 2ndGAB Hmm ... Sadece 45.0.1im var, bu yüzden test edemiyorum ... başkası?
Jordan Kasper

@ 2ndGAB Düzeltme, My Firefox 46.0.1 sürümüne güncellendi ve bu kod hala orada çalışıyor. Onaylayabilir misin?
Jordan Kasper

@jakerella garip, benim için bir girdi dosyası seçici değeri ayarlamak bir Güvenlik istisnası tetikler. Başarılı bir şekilde kullandığım tek çözüm$(#myfileselector).trigger('fileselect', [1, ""]);
fralbo

3
girdi.türü = ''; input.type = 'dosya'; // keyfini çıkarın
Maxmaxmaximus

81

Sen sarmak gerekiyor <input type = “file”>için <form>etiketleri ve sonra formunuzu sıfırlayarak girişi sıfırlayabilirsiniz:

onClick="this.form.reset()"

7
Bu doğru yöntemdir. Tüm tarayıcılarda çalışır ve dolandırıcılık komut dosyalarının dosya girdisinin .value ile uğraşmasını önlemek için tarayıcıların uyguladığı korumalarla çakışmaz.
Eugene Ryabtsev

9
Biraz havalı, benim için değil, çünkü bu formdaki diğer alanları da sıfırlıyor.
Starwave

2
Benzer bir jQuery çözümü olabilir $("form").get(0).reset();. .get(0)Kullanmak böylece gerçek form elemanı dönecektir reset()işlevi.
teewuane

74

Bu EN İYİ çözümdür:

input.value = ''

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

Buradaki tüm cevaplardan en hızlı çözüm budur. Giriş klonu yok, form sıfırlama yok!

Tüm tarayıcılarda kontrol ettim (hatta IE8 desteği var).


4
Ayrıca sıfırlamak için özel bir neden var mı input.type? Yalnızca değerini ayarlamak ''beklenen sonucu verir.
Harshita Sethi

Tetiklenebilmesi mu onchangeMS Edge olayı?
hotohoto

@hotohoto bilmiyorum, bir mac os var)
Maxmaxmaximus

1
Bu biraz daha fazla oy veya başka bir şeye ihtiyacı var, bu cevabı bulmak için çok uzun sürdüm, bu IE üzerinde çalışan bulduğum tek kişi.
sch

input.value = '' IE11'deki konsola bir istisna atar. Ancak input.type öğesini sıfırlamak tüm tarayıcılarda hatasız çalışır.
Miroslav Jasso

45

Aşağıdakilere sahipseniz:

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

o zaman yap:

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

dosya kontrolünü sıfırlamak için.


6
En iyi çözüm IMHO.
Serhii Maksymchuk

3
Veya DOM kullanın:inputFileEl.value = '';
Ninh Pham

44

Sadece klonlayabilir ve onunla değiştirebilirsiniz, tüm olaylar hala bağlı:

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

ve

var input = $("#control");

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

Teşekkürler: Css-tricks.com


1
Ne yazık ki bu giriş değerini sıfırlamaz, bkz . JsFiddle . Daha iyi bir çözüm için bu cevaba bakınız .
Gyrocode.com

1
@ Gyrocode.com Görüntü sıfırlandıktan sonra ikinci kez yüklenirse bu jsFiddle çalışmaz.
Sarthak Singhal

2
@SarthakSinghal, Maalesef yanlış kod yazdınız, jsfiddle.net/cL1LooLe
Roger Russel

2
@RogerRussel: Kesinlikle ... Üst yanıtların nasıl geldiğini sadece bir kez işe yaradığını söylüyordum, bu da bir tür referansın kaybolduğunun açık bir göstergesi. Aslında durum böyleydi, çünkü başlangıçta daha sonra yeni bir girdi elemanı ile değiştirilen girdi referansını yarattı.
Robert Koritnik

1
valueDiğer cevaplardaki benzerleri sıfırlamak , DOM'yi manipüle etmekten çok daha basit görünüyor.
CodeFinity

40

Başka bir çözüm (HTML DOM öğelerini seçmeden)

Bu girişe 'change' olay dinleyicisini eklediyseniz, javascript kodunda çağırabilirsiniz (belirtilen bazı koşullar için):

event.target.value = '';

Örneğin HTML'de:

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

Ve javascript'te:

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

Açısal2 için başka bir yol: stackoverflow.com/questions/40165271/…
Belter

Bu yalnızca .dosya uzantısının önünde tek bir dosya içeren dosya adlarında çalışır .
Ma Kobi

Doğru, kodu düzenledim ve bir dosya uzantısı almak için daha evrensel bir yaklaşım sağladım.
indreed

31

ÇÖZÜM

Aşağıdaki kod jQuery ile benim için çalıştı. Her tarayıcıda çalışır ve olayların ve özel özelliklerin korunmasına izin verir.

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

DEMO

Kod ve tanıtım için bu jsFiddle'a bakın .

BAĞLANTILAR

Daha fazla bilgi için bkz. JavaScript ile dosya girişini sıfırlama .


1
@alessadro, hayır, yalnızca <input type="file">belirli bir tanıtıcıya sahip öğe .
Gyrocode.com

Teşekkürler cevabınızı netleştirin :) +1
candlejack

1
Bu, şimdiye kadar bulduğum en temiz ve en tarayıcı uyumlu çözüm - teşekkürler.
Pat

25

Saf JavaScript kullanarak bir dosya yükleme düğmesini sıfırlamak çok kolay !

Bunu yapmanın birkaç yolu vardır, ancak birçok tarayıcıda iyi çalışan zorunluluk yolu dosyalanmış değeri hiçbir şeye değiştirmektir, bu şekilde yükleme dosyası sıfırlanır, ayrıca herhangi bir çerçeve yerine saf javascript kullanmaya çalışın, Aşağıdaki kodu kontrol edin (ES6):

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


jquery ile nasıl
Anand Choudhary

1
@AnandChoudhary bu jQuery içinde de çalışır, ancak const file = document.querySelector ('. File'); const dosyası = $ ('. dosya'); veya sadece $ ('. file'). val (""); boşaltmak için
Alireza

18

Özellikle Açısal

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

Çalışacak, ancak Açısal kullanırsanız "HTMLElement'.any" türünde "Özellik 'değeri' yok diyecektir.

document.getElementById (), value özelliği içermeyen HTMLElement türünü döndürür. Bu nedenle, HTMLInputElement içine dökün

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

EKSTRA: -

Bununla birlikte, DOM manipülasyonunu (document.xyz ()) açısal olarak kullanmamalıyız.

Bu açısal bunu yapmak için sırasıyla document.querySelector (), document.queryselectorAll () olan @VIewChild, @ViewChildren vb.

Ben okumadım bile. Uzman bloglarını takip etmek daha iyi

Bu üzerinden gidin link1 , LINK2


memnun açısal kullanmak zorunda değilim!
user2677034

Hayır. FIx orada olurdu. Bunu sadece ben buldum. Hangisini kullanıyorsunuz?
P Satish Patro

Üzgünüm, alaycı oluyordum ... Sadece document.getElementById ('uploadFile') kullanıyorum. Value = ""; çünkü açısal kullanmıyorum.
user2677034 06

Güzel bir. Ben de öyle düşünmüştüm, Ama Açısal / Tepki / VUe kullan Bunlar yönlendirme, bileşen, hizmet, dom manipülasyonunu geçersiz kılma uygulaması için güçlü çerçevelerdir
P Satish Patro

14

Vuejs için kullanıyorum

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

this.$refs.fileref.value = ''

2
Teşekkürler dostum! Vuejs ile asla bir çözüm bulamayacağımı düşündüm: D, günüme kızdın!
19'da Zsoca

1
Bir cazibe gibi çalıştı! Thank you
F

8

Sıfırlanan girdi dosyası çok tek

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

Eğer bağlarsanız, formun diğer alanını değiştirmek için dosyayı sıfırlayın veya ajax ile formu yükleyin.

Bu örnek uygulanabilir

Örneğin, seçici$('input[type=text]') veya formun herhangi bir öğesi

Olay click , changeveya herhangi bir olay

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

5

İle IE 10 Sorunu ile çözüldü:

    var file = document.getElementById("file-input");
    file.removeAttribute('value');
    file.parentNode.replaceChild(file.cloneNode(true),file);

nerede :

<input accept="image/*" onchange="angular.element(this).scope().uploadFile(this)" id="file-input" type="file"/>


5

Birçok yaklaşım vardır ve ben girdiye ref eki ile gitmek önerecektir.

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

Gönderdikten sonra değeri temizlemek için.

this.fileInput.value = "";


4

Açısal ile bir şablon değişkeni oluşturabilir ve değeri null

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

Veya bu şekilde sıfırlamak için bir yöntem oluşturabilirsiniz

component.ts

  @ViewChild('fileUploader') fileUploader:ElementRef;

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

şablon

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

stackblitz demosu


2

Bunu salt okunur bir dosya olduğu için sıfırlayamazsınız. sorunu çözmek için klonlayabilirsiniz.



2

Bu böyle yapılabilir

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 çözümü:

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

Nasıl çalıştığını açıklamak için bu cevabı doldurmayı düşünün.
Bugs

@Bugs sanırım bu kendisi için konuşuyor. Dosya girişinin on changeolayı tetiklendiğinde değer silinir. Giriş türü hiçbirinden dosyaya sıfırlanır.

2
@Jordy evet Ne yaptığını biliyorum :) Sadece bir düzine başka cevapla göze çarpmaya çalışacağını düşünüyordum. Ben gözden geçirirken ortaya çıktı. Aslında yorumunuzu biraz daha fazla doldurmak için kopyalayabilirler. Her zaman kodun OP sorununu neden düzelttiğini hissettiğinizi açıklamaya değer.
Bugs

1

Açısal olarak ng2-file-upload ile ilgili sorunla karşılaştım. çözümü açısal olarak arıyorsanız aşağıdaki kodu inceleyin

HTML:

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

bileşen

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

@ViewChild('activeFrameinputFile ')GirdiFrameDeğişken: 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;

    });
});


Bu kod soruyu çözebilir, ancak bunun sorunun nasıl ve neden çözüldüğüne dair bir açıklama da dahil olmak üzere , yayınınızın kalitesini artırmaya yardımcı olabilir ve muhtemelen daha fazla oyla sonuçlanır. Sadece şimdi soran kişi için değil, gelecekte okuyucular için soruyu cevapladığınızı unutmayın. Lütfen açıklama eklemek için yanıtınızı düzenleyin ve hangi sınırlamaların ve varsayımların geçerli olduğunu belirtin. Şu kaynaktan
double-beep

0

Formunuzda birkaç dosyanız varsa ancak bunlardan yalnızca birinin sıfırlanmasını istiyorsanız:

giriş dosyası formunu görüntülemek için boostrap, jquery, filestyle kullanıyorsanız:

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

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

0

Dinamik kontroller için de çalışır.

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>

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.