2015-04-24 3 views
6

У меня есть следующий код, в котором я выбираю все соответствующие элементы, начинающиеся с того же имени, за исключением одного, которое я не хочу включать в группу.TypeError: .val не является функцией

var myInputBoxes= $('input[id ^= "SubjectText"]').not('#SubjectTextNew'); 
for (i = 0 ; i < myInputBoxes.length; i++){ 
    var SubjectId = myInputBoxes[i].id.replace('SubjectText', ''); 
    var Subject = myInputBoxes[i].val(); 
} 

Это дает мне следующее сообщение об ошибке в Firefox

TypeError: myInputBoxes[i].val is not a function

Почему она не справится с функцией валь?

ответ

22

Доступ к объекту jQuery с использованием скобок нотации возвращает DOMElement, который не имеет функции val(). Если вы хотите, чтобы получить элемент по его индексу в согласованном наборе вы должны использовать eq():

var Subject = myInputBoxes.eq(i).val(); 

В качестве альтернативы вы можете сохранить DOMElement и использовать value свойство:

var Subject = myInputBoxes[i].value; 
+0

Также вы можете преобразовать 'DOMElement' в объект' jQuery', например, '$ (subjectBoxes [i]). Val();' –

+0

Хотя это сработает, в чем смысл взять объект jQuery, получить от него DOMElement, затем преобразовать это обратно в объект jQuery? –

+0

Из любопытства я могу изменить свой запрос, чтобы вернуть объекты jQuery? (и иметь возможность запрашивать только частичный идентификатор?) –

1

Поскольку subjectBoxes[i] не объект jQuery, если это объект jQuery, то вы можете использовать .eq(), чтобы получить ссылку на обертку jQuery на элемент по переданному индексу

var myInputBoxes = $('input[id ^= "SubjectText"]').not('#SubjectTextNew'); 
myInputBoxes.each(function (e, el) { 
    var SubjectId = this.id.replace('SubjectText', ''); 
    var Subject = subjectBoxes.eq(i).val(); 
}) 
Смежные вопросы