Mansfield
Mansfield

Reputation: 15150

Jquery input.files equivalent

I have a simple html form with a single file upload input. (jsfiddle)

In the past, I have accessed the file selected by the user using input.files, however I am at a loss as to how to do this with JQuery;

Code:

$(function () {
    $("#cmdSubmit").bind("click", function () {
        var file = document.getElementById("fileInput").files[0];
        alert(file); //A

        file = $("#fileInput").val();
        alert(file); //B

        file = $("#fileInput").files[0];
        alert(file); //C

    });        
});​

Option A give me what I expect, a file object. However, option B simply gives me the name of the uploaded file, and (as far as I can tell) not the file itself.

Option C shows that files is undefined.

What is the Jquery equivalent of input.files?

Note: I have no objection to using native javascript; but given that I am using JQuery throughout the rest of this project I'd prefer to use it here as well if possible.

Upvotes: 27

Views: 61214

Answers (4)

Stefan
Stefan

Reputation: 14863

You have to access the element. Try:

file = $("#fileInput")[0].files[0];
alert(file); //C

or (thank you Jack)

file = $("#fileInput").prop('files')[0];
alert(file);

Fiddle

Upvotes: 62

Sridhar Narasimhan
Sridhar Narasimhan

Reputation: 2653

Try the below code

var file = $("#fileInput").get(0).files[0];
 alert(file);

Thanks

Upvotes: 4

Quentin
Quentin

Reputation: 943510

jQuery doesn't provide a wrapper for the Files API. So there isn't a jQuery style way to do this, at least not built into the jQuery core.

Your options:

  • stick with option A
  • wait for jQuery to include such a wrapper (they might not)
  • find an extension written by someone else (if one exists)
  • write an extension yourself

Upvotes: 3

arhea
arhea

Reputation: 454

$(function () {
    $("#cmdSubmit").bind("click", function () {
       alert(this.files);
     });        
});​

Upvotes: 0

Related Questions