2013-11-13 2 views
0

Этот вопрос может показаться элементарным для некоторых, но я не могу обойти его. Я работаю над загрузкой файла XMLHttpRequest Ajax. первый шаг к выбран элемент FileUpload, который находится на моей странице и по какой-то причине Javascript работает, но не запрашивать, вот следующие две строки:В чем причина того, что document.getElementById работает, но jquery нет?

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

я должен указать метод после выбора Jquery или СТГ ? Потому что я не понимаю, почему еще это не сработает, разве это не тот же самый код?

Я добавил файл jquery.js сверху (у меня много строк jquery, работающих с другими частями моего файла, так что это не может быть проблемой.) И документ готов. Я получил его, чтобы работать, но я задаюсь вопросом о причине этого.

Редактировать

К не работает, я имею в виду, что с селектором Jquery я получаю «неопределенный» в журнале консоли, но с JavaScript, я получаю всю информацию о файле, что мне нужно.

+0

Во-первых, является ли вар в документе готовым? Во-вторых, какую версию jquery вы используете? В-третьих, id загружен после страницы i.e через ajax? –

+0

@LiamSorsby: если работает чистая версия JavaScript, а не в вызове '$ (document) .ready', это не проблема. –

+1

Что значит «не работает»? –

ответ

2

Проблема заключается в том, что объект jQuery является оберткой для фактического объекта DOM, который в данном случае является элементом HTML <input>, который имеет тип file. Только фактический объект DOM имеет свойство files, а не объект jQuery. Вы можете получить доступ к элементам DOM, на которые ссылаются, используя числовые индексы, которые будут только 0 в этой ситуации. Таким образом, это решение:

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

Конечно, JQuery способ сделать это было бы использовать функцию prop(), которая получает свойство первого объекта DOM в объекте JQuery:

fileInput.prop('files')[0]; 
+1

Это неправда, объект jQuery является только оболочкой, а также имеет свойство 'files', но вам нужно будет получить к нему доступ, как и любое свойство в jQuery, с помощью' prop() '-> http://jsfiddle.net/t4PyB/ – adeneo

+0

@adeneo: true - я не использую jQuery много, это тем более «jQuery» способ сделать это. –

1

Учитывая, что я не знаю, что вы подразумеваете под «не работает», я бы предположил, что его, потому что все, что использует fileInput, хочет элемент DOM, а не объект jquery. Попробуйте следующее:

var fileInput = $('#the-file')[0]; 
Смежные вопросы