2013-06-11 12 views
9

Wiem, że to proste pytanie, ale potrzebuję porady od doświadczonych ludzi.Lepszy sposób sprawdzenia, czy niektóre pliki typów wejść są puste w jquery?

mam 3 wejścia plik typu jak:

<input type="file" name="1-files" /> 
<input type="file" name="2-files" /> 
<input type="file" name="3-files" /> 

wybiorę wszystkie wejścia (na mojej stronie mam też inne wejścia typ pliku), którego nazwa kończy się na „-files” (pisałem w konsoli Google Chrome):

$("input[type='file'][name*='-files']").length 

Ok. Wybieram plik przy użyciu wejścia 1-files. Po tym, uruchom następujący kod w konsoli Google Chrome:

$("input[type='file'][name*='-files']:empty").length 

Spodziewam się 2 ale wydaje 3.

Czy możesz mi powiedzieć, dlaczego?

Chcę uzyskać wszystkie elementy pliku typu wejściowego, które wartości są puste. Użyłem w skrócie selektora :empty, ale wygląda na to, że nie działa poprawnie.

Oczywiście, mogłem użyć

var empty_count = 0; 
$.each($("input[type='file'][name*='-files']"), function(k, v){ 
    if($(this).val() === '') 
    empty_count++; 
}); 

Ale chcę najkrótszy sposób to zrobić bez $.each.

Dziękuję

+1

elementy wejściowe nie mogą zawierać treści, więc oni zawsze puste. [: Empty doco] (http://api.jquery.com/empty-selector/) tak jednoznacznie mówi ... – nnnnnn

+0

Powinieneś zarządzać pustką za pomocą atrybutu ".val" – Jaay

Odpowiedz

10

Pasuje trzy ponieważ :empty mecze elementem bez potomków, i jestem wejściowego elementu definicji nie może mieć potomków (tak wszystkie są puste, a więc pasuje do selektora :empty).

Aby znaleźć te elementy, bez zaznaczonych plików, polecam:

$("input[type='file'][name*='-files']").filter(function(){ 
    return !this.value 
}).length; 

Referencje:

+0

OK, a następnie jak policzyć puste wyceniane dane wejściowe? bez $ .each jeśli to możliwe –

+0

Edytowałem to, powoli. Niestety, na tablecie, a nie na pulpicie. –

+0

Nie ma problemu, nie martw się. Wiem, jak trudno jest na tablecie –

3

można użyć filter insted $.each ..

$("input[type='file'][name*='-files']").filter(function(k){ 
    return $(this).val() === ''; 
}).length; 
1

rozważyć następujące kody, zawsze używany to:

 $("input[type='file'][name*='-files']").each(function(){ 
     if($(this).val().length == 0){ 
      alert("field is empty"); 
     } 

    }); 
+3

To wystarczy "jeśli (! $ (This) .val(). Length) alert ..." –

Powiązane problemy