1

这个问题对某些人来说可能看起来很简单,但我无法理解它。我正在处理 XMLHttpRequest Ajax 文件上传。第一步是选择我页面上的 fileUpload 元素,由于某种原因,javascript 可以工作但不能查询,这里有以下两行:

var fileInput = $('#the-file'); //doesn't work
var fileInput = document.getElementById('the-file'); //works

我必须在 jquery 选择器或某事之后指定一个方法吗?因为我不明白为什么它不起作用,它们实际上不是相同的代码吗?

我已经在顶部添加了 jquery.js 文件(我有很多行 jquery 在我的文件的其他部分工作,所以这不会是问题。)并且文档准备好了。我让它工作,但我想知道这背后的原因。

编辑

不起作用我的意思是使用 jquery 选择器我在控制台日志中得到“未定义”,但使用 javascript 我得到了我需要的所有文件信息。

4

2 回答 2

2

The problem is that the jQuery object is a wrapper for the actual DOM object - which in this case is an HTML <input> element which has the type file. Only the actual DOM object has the files property, not the jQuery object. You can access the DOM elements referenced by using numeric indexes, which will only be 0 in this situation. Therefore, this is the solution:

var fileInput = $('#the-file');
fileInput.files[0]; // TypeError: cannot read property '0' of undefined
fileInput[0].files[0]; // works

Of course, the jQuery way of doing it would be to use the prop() function, which gets the property of the first DOM object in the jQuery object:

fileInput.prop('files')[0];
于 2013-11-13T12:52:50.677 回答
1

鉴于我不知道“不起作用”是什么意思,我猜这是因为使用 fileInput 的任何东西都需要 DOM 元素而不是 jquery 对象。尝试这个:

var fileInput = $('#the-file')[0];
于 2013-11-13T12:53:58.237 回答