HTML <input type = 'file'> Dosya Seçim Etkinliği


144

Diyelim ki bu koda sahibiz:

<form action='' method='POST' enctype='multipart/form-data'>
    <input type='file' name='userFile'><br>
    <input type='submit' name='upload_btn' value='upload'>
</form>

sonuçlanan:

Göz at ve yükle düğmesini gösteren resim

Kullanıcı 'Göz at ...' düğmesini tıkladığında, bir dosya arama iletişim kutusu açılır:

bir dosya seçiliyken bir dosya arama iletişim kutusunu gösteren resim

Kullanıcı dosyayı çift tıklatarak veya 'Aç' düğmesini tıklatarak seçecektir.

Dosya seçildikten sonra bilgilendirilmek için kullanabileceğim bir Javascript Olayı var mı?


6
Ne korkak bir eski windows UI!
El-Burritos

@ El-Burritos bu 2010 yılında gönderildi; Tabii ki, eski bir Windows kullanıcı arayüzü: D
Simon Cheng

Yanıtlar:


181

Değişiklik olayını dinleyin.

input.onchange = function(e) { 
  ..
};

3
nereye yazacağız .. javascript script tags
Moon

5
komut dosyası etiketlerinde evet veya <input type="file" onchange="..." />bu önerilmese de bir niteliği ( ) olarak ekleyebilirsiniz .
Anurag

7
IE7 ve 8'de 'change' olayının form olayıyla sınırlı olmadığını unutmayın. Dinleyicinizi <input> etiketine koymanız gerekir.
xer0x

36
Kullanıcının bir dosyayı "yeniden yüklemesi" gerekiyorsa ne olur? onchange tetiklenmez, ancak yine de ilk kez yüklüyormuş gibi yeniden yüklenmelidir.
bryc

11
Dosya değişmediğinden, kullanıcı aynı dosyayı art arda birden fazla kez seçerse bu işe yaramaz.
bob0the0mighty

46

Dosyayı yeniden yüklemeniz gerektiğinde, girişin değerini silebilirsiniz. Bir dahaki sefere dosya eklediğinizde, 'değiştiğinde' olayı tetiklenir.

document.getElementById('my_input').value = null;
// ^ that just erase the file path but do the trick

5
Bu iyi çalışıyor ama garip IE <11 davranışının farkında olun. Girişin değerini değiştirmenize izin vermez, bu nedenle büyük olasılıkla bir geçici çözüme ihtiyacınız olacaktır. stackoverflow.com/questions/9011644/…
Oleksandr Tkalenko

15

jQuery yolu:

$('input[name=myInputName]').change(function(ev) {

    // your code
});

4

İptal seçeneğini tıklasanız bile Değiştir olayı çağrılır.


2
Soruları kod snippet'inde herhangi bir değişiklik olayı olmadığından, cevabınızı açıklamak için bazı kodlar sağlamanız yararlı olacaktır
DevDig

Sanırım @anthony şu senaryoya başvuruyor: Bir dosya seçin. Şimdi dosya seçiciyi tekrar açın, ancak bu sefer İptal'e tıklayın. İkinci kez hiçbir dosya seçilmediğinden, dosya giriş kontrolü sıfırlanır, böylece ilk seçimi değiştirilir ve change olayı tetiklenir.
dvlsc

Chrome 83'te denedim ve İptal düğmesini tıkladığımda etkinlik tetiklenmiyor. Bu cevap oldukça eski ve sanırım en azından Chrome'da düzeltilmiş olmalı.
Saeed Ahadian

3

Saf JS ile bunu yaptım:

var files = document.getElementById('filePoster');
var submit = document.getElementById('submitFiles');
var warning = document.getElementById('warning');
files.addEventListener("change", function () {
  if (files.files.length > 10) {
    submit.disabled = true;
    warning.classList += "warn"
    return;
  }
  submit.disabled = false;
});
#warning {
    text-align: center;
}

#warning.warn {
	color: red;
	transform: scale(1.5);
	transition: 1s all;
}
<section id="shortcode-5" class="shortcode-5 pb-50">
    <p id="warning">Please do not upload more than 10 images at once.</p>
    <form class="imagePoster" enctype="multipart/form-data" action="/gallery/imagePoster" method="post">
        <div class="input-group">
  	    <input id="filePoster" type="file" class="form-control" name="photo" required="required" multiple="multiple" />
	    <button id="submitFiles" class="btn btn-primary" type="submit" name="button">Submit</button>
        </div>
    </form>
</section>

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.