2013-11-27 6 views
14

Ho 4 input di file che desidero caricare durante il loro valore. Intendo quando si seleziona un'immagine e si fa clic su Apri nella finestra di dialogo Seleziona immagine, viene attivato lo script per caricare l'immagine. Ho usato onchange evento, ma credo che questo non è l'evento:in caso di modifica dell'elemento di input del file

JS:

$("input[type=file]").on('change',function(){ 
    alert(this.val());//I mean name of the file 
}); 

HTML:

<div class="form-group col-md-11 col-md-offset-1"> 
    <input type="file" name="photos[]"> 
    <input type="file" name="photos[]"> 
    <input type="file" name="photos[]"> 
    <input type="file" name="photos[]"> 
</div> 

Cosa devo fare?

+0

possibile duplicato di [? Come ottenere tutto il nome del file immagine prima dell'inizio caricare] (http://stackoverflow.com/questions/18400686/how-to-get-all-image-file-name-before-start-upload) o http://stackoverflow.com/questions/1804745/get-the-filename-through-javascript – ahren

+1

'val()' è una funzione jquery, ma 'this' nel tuo contesto è un oggetto DOM. Prova 'this.value' o' $ (this) .val() 'e guarda cosa succede. –

risposta

4

Utilizzare la files filelist dell'elemento anziché val()

$("input[type=file]").on('change',function(){ 
    alert(this.files[0].name); 
}); 
+0

Quando si attiva l'evento di modifica? È quando scegliamo un nuovo file o quando il file viene caricato completamente? Se è il primo, come posso attivare l'evento quando il file viene caricato completamente? –

1

Dare classe unica e diversa id per l'input di file

  $("#tab-content").on('change',class,function() 
       { 
        var id=$(this).attr('id'); 
         $("#"+id).trigger(your function); 
       //for name of file input $("#"+id).attr("name"); 
       }); 
+0

Funziona davvero. Associare l'evento a un elemento genitore attiva l'evento-cambiamento ogni volta che viene effettivamente modificato. – russinkungen

11

L'evento OnChange è una buona scelta. Ma se un utente seleziona la stessa immagine, l'evento non verrà attivato perché il valore corrente è lo stesso del precedente.

L'immagine è la stessa con una larghezza modificata, ad esempio, e dovrebbe essere caricata sul server.

Per evitare questo problema si potrebbe utilizzare il seguente codice:

$(document).ready(function(){ 
    $("input[type=file]").click(function(){ 
     $(this).val(""); 
    }); 

    $("input[type=file]").change(function(){ 
     alert($(this).val()); 
    }); 
}); 
+0

Sembra che firefox attiverà l'evento anche se è la stessa immagine, ma Chrome non lo farà. – ooolala