2013-06-11 10 views
9

So che è una domanda semplice ma ho bisogno di un consiglio da persone esperte.Un modo migliore per verificare se alcuni tipi di input sono file vuoti in jQuery?

ho 3 file di input type come:

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

ho selezionare tutti gli ingressi (sulla mia pagina ho anche altri ingressi file di tipo) il cui nome termina con "lime" (ho scritto nella console di Google Chrome):

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

Ok. Seleziono un file usando l'input 1-files. Dopo di che, ho eseguito il seguente codice nella console Google Chrome:

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

mi aspetto di essere 2 ma appare 3.

Puoi dirmi perché?

Voglio ottenere tutti gli elementi del tipo di input che i valori sono vuoti. Ho usato in breve il selettore :empty ma sembra non funzionare correttamente.

Certo, avrei potuto usare

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

Ma voglio la via più breve per fare questo senza $.each.

Grazie

+1

elementi di input non possono contenere contenuti, quindi sono sempre vuoto Il [: doco vuoto] (http://api.jquery.com/empty-selector/) dice così esplicitamente ... – nnnnnn

+0

Dovresti gestire il vuoto con l'attributo '.val' – Jaay

risposta

10

corrisponda tre perché :empty corrisponde a un elemento, senza discendenti, e sono elemento di input, per definizione, non può avere discendenti (in modo che tutti sono vuoti, e quindi abbinare il selettore :empty).

Per trovare quegli elementi senza i file selezionati, suggerirei:

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

Riferimenti:

+0

Ok, allora come contare il vuoto- input stimati? senza $ .each se possibile –

+0

L'ho modificato lentamente. Siamo spiacenti, su un tablet, non sul desktop. –

+0

Nessun problema, non preoccuparti. So quanto sia difficile il tablet –

3

è possibile utilizzare filter invece di $.each ..

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

considerare i seguenti codici, ho sempre usato questo:

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

    }); 
+3

È sufficiente 'se (! $ (This) .val(). Length) alert ...' –

Problemi correlati