2013-02-08 11 views
5

Próbuję uzyskać informacje o pliku są przesyłane w danych wejściowych HTML z następującego kodu:„Input Typ file.files” selektor nie działa w jQuery

$(document).ready(function() { 
 
    $('#btn').on('click', function() { 
 
    file_size = $("#my_file").files[0].size; 
 
    alert(file_size); 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<form> 
 
    <input id="my_file" type="file" name="my_name" /> 
 
    <input id="btn" type="button" /> 
 
</form>

Ale to nie działa, a na konsoli: $("#my_file").files is undefined

Odpowiedz

33

$("#my_file") jest obiektem jQuery i jQuery obiekt nie posiada własności files ...

Aby uzyskać elementu DOM z jQuery, zrobić

($("#my_file"))[0].files[0].size 

Jako dodatkowa uwaga, jeśli nie wybrano żadnego pliku, ($("#my_file"))[0].files[0] daje undefined i ($("#my_file"))[0].files[0].size rzuci błąd.
Zaleca się dodać czek ...

if (($("#my_file"))[0].files.length > 0) { 
    file_size = ($("#my_file"))[0].files[0].size 
} else { 
    // no file chosen! 
} 
1

jQuery obiekt nie posiada files nieruchomości, można użyć metody stare getElementById lub jQuery get na wybraniu obiektu DOM element.

$(document).ready(function() { 
 
    $('#btn').on('click', function() { 
 
    file_size = document.getElementById("my_file").files[0].size; 
 
    alert(file_size); 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<form> 
 
    <input id="my_file" type="file" name="my_name" /> 
 
    <input id="btn" type="button" /> 
 
</form>

-3

$(document).ready(function() { 
 
    $('#btn').on('click', function() { 
 
    file_size = document.getElementById("my_file").files[0].size; 
 
    alert(file_size); 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<form> 
 
    <input id="my_file" type="file" name="my_name" /> 
 
    <input id="btn" type="button" /> 
 
</form>

+0

ta jest dokładną kopią innej odpowiedzi napisali 4 lata temu. – JJJ