Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

"Input type file.files" selector not working in jQuery

I'm trying to get information about the file being uploaded in an HTML input with the following code:

$(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>

But it doesn't work, and the console returns: $("#my_file").files is undefined

like image 781
Oto Shavadze Avatar asked Feb 08 '13 12:02

Oto Shavadze


2 Answers

$("#my_file") is a jQuery object, and a jQuery object does not have a property files...

To get the DOM element out of jQuery, do

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

As an extra note, if you have not selected any file, ($("#my_file"))[0].files[0] gives you undefined and ($("#my_file"))[0].files[0].size will throw error.
You are recommended to add a check...

if ($("#my_file")[0].files.length > 0) {
    file_size = $("#my_file")[0].files[0].size
} else {
    // no file chosen!
}
like image 77
luiges90 Avatar answered Nov 17 '22 04:11

luiges90


jQuery object doesn't have files property, you can use the old getElementById or jQuery get method for selecting the DOM Element object.

$(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>
like image 6
undefined Avatar answered Nov 17 '22 05:11

undefined