Jquery input.files equivalent

2020-02-05 02:06发布

问题:

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.

回答1:

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



回答2:

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


回答3:

Try the below code

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

Thanks



回答4:

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