Arka plan rengi belirtme veya arka plan resmi yükleme seçeneği içeren bir AJAX formu oluşturuyorum. bgImg
alanı için bir dosya belirtildiyse, bgColor
alanındaki alanın yok sayılması hedeflenir. sorundur Bir FormData dosyasının boş olup olmadığını nasıl kontrol ederim?
var fd = new FormData(document.getElementById('myForm'));
, ben FormData nesnesini nasıl kontrol edileceğini bilmiyorum
:<label>Color: <input type="color" name="bgColor" value="#000000"></label><br>
<label>Image: <input type="file" name="bgImg" accept="image/png"></label><br>
Ben FormData API kullanarak, form verilerini elbette, toplamak için en kolay yol buldum bir dosyanın seçilip seçilmediğini. Dosya girişi boş olsun ya da olmasın, alan mevcut olduğundan
fd.has('bgImg')
, doğru döner - tamam, bu mantıklı.
Ama fd.get('bgImg')
rağmen bir dosya belirtilmişse çalışıyor ve o zaman pozitif vaka doğrulayabilir, dosya giriş boşken aynı çizgi dik benim tarayıcı çöküyor! (Sadece Firefox'ta kontrol ettim, fakat bu, gerçek senaryomda veya tarayıcı konsolunda olsun, tutarlı bir şekilde gerçekleşir.) Ne yazık ki tanınabilir ama kararsız olan bir işlemin etkin bir şekilde işe yaramayacağı bir "bir dosya olup olmadığını kontrol edin." Peki, bgImg
alanının boş olup olmadığını nasıl anlayacağım?
Ben de sadece formun elements['bgImg'].files
nesneyi kontrol edebilirsiniz farkındayım, ama FormData API zaten orada olduğunu ve kıvrımlara, ve görünüşe göre ölümcül borked açılması sağlanmaması halinde daha kolay olurdu! Yani bir şey mi eksik? Eğer bir şekilde uygun FormData nesnesini kullanmanın bir yolu yanlışsa, o zaman ne yapmam gerekiyordu? Tek çözüm olarak files
koleksiyonunu kontrol ediyor mu?
DÜZENLEME: Daha fazla araştırma, bu API'nın Firefox dışındaki tarayıcılarda oldukça zayıf bir desteğe sahip olduğunu ortaya çıkarmıştır, bu nedenle element.files
'un gerçekten daha iyi bir çözüm olup olmadığını kontrol etmek mümkündür. Yine de bunun Firefox’ta tarayıcıyı neden çökeceği konusunda şaşkınım. Bu cephedeki bir cevap kısa süre içinde değilse, muhtemelen kendi cevabımı gönderirim.
Bu iyi bir soru. Görebildiğim kadarıyla, bir FormData'nın boş olup olmadığını veya yerel yöntemlerle bir şey olup olmadığını kontrol edemezsiniz. https://developer.mozilla.org/en-US/docs/Web/API/FormData – rottenoats
Sanırım, '(element.files || element.value) .length> 0 || element.file' (ya da benzeri Bu) _only_ çözümü… 'FormData'' get' ve 'getAll' da tarayıcımı kilitler. Bugzilla'da bunun için bir hata raporu var mı? Şimdiye kadar hiçbir şey bulamadık… – Xufox
Ben de bulamadım, sanırım bir tane göndereceğim. Sağduyularıma tekrar kavuştuktan sonra, API'yı kötüye kullandığım her ne kadar olursa olsun, bir tarayıcı çökmesine sebep olmamalı, dolayısıyla bir hata olması gerektiğini anladım. – endemic