2013-09-27 13 views
6

Ho molti di questi tipi di ingresso:Come verificare se uno dei tipi di input di file ha un valore?

<input type="file" name="file_upload"> 

E quando il pulsante di invio viene cliccato, voglio controllare tramite JS se uno di questi campi non sono vuoti (in altre parole, v'è almeno un file caricato).

Ecco il mio codice che non funziona:

$('#upload-button').live('click', function() { 
    var has_selected_file = $('input[type=file]').val(); 

    if (has_selected_file) { 
    /* do something here */ 
    } 
    else { 
    alert("No file selected"); 
    } 
}); 

Questo avvisa sempre no file selezionato.

risposta

7

Usa .filter() a findout elemento di input con un valore, e controllare la lunghezza

$('#upload-button').live('click', function() { 
    var has_selected_file = $('input[type=file]').filter(function(){ 
     return $.trim(this.value) != '' 
    }).length > 0 ; 

    if (has_selected_file) { 
     /* do something here */ 
    } 
}); 
+0

Grazie ha funzionato, la cura per spiegare che cosa è l'uso del filtro e la parte di ritorno troppo? –

+0

@BelmarkCaday Ho appena fatto un aggiornamento per correggere un bug –

+1

'filter' è una funzione js nativa che esegue la funzione specificata su ogni membro dell'oggetto/array. Qui si scorre la collezione di tag [file] di input e si restituisce un array di tutti gli elementi con un file selezionato. Se questo array non ha zero lunghezza, 'has_selected_file' è vero .. quindi' fai qualcosa ' – jagzviruz

1

si può solo fare:

var has_selected_file = $.trim($('input[type=file]').val()); 

if (has_selected_file != "") { 
    /* do something here */ 
} 
else { 
    alert("No file selected"); 
} 
Problemi correlati