2010-02-04 4 views
0

Это сводит меня с ума. Пожалуйста, кто-нибудь сказать мне, что я не сумасшедший:jQuery Проверка работоспособности

var constraints = $('.traffic-constraints :input'); 
console.log(constraints); 

var i; 
for (i = 0; i < constraints.length; i++) { 
    if (constraints[i].val() > 0) { //<-------- errorrzz 
.... 

консоль говорит мне, что я делаю, на самом деле, есть входные объекты в моем селекторе (5 из них). однако я получаю следующую ошибку: constraints[i].val is not a function

wtf?

ответ

2

Во-первых, использовать .each() это проще :)

Но, чтобы ответить на вопрос, почему не это работает ... Вы имеете дело с йот элемента с этим индексом, вам нужно обернуть его или .eq(i) acesss его:

for (i = 0; i < constraints.length; i++) { 
    if ($(constraints[i]).val() > 0) { 

или (лучше, но до сих пор используют .each()!):

for (i = 0; i < constraints.length; i++) { 
    if (constraints.eq(i).val() > 0) { 
+0

спасибо ... я понял это второй, прежде чем вы разместили это! – Jason

0

Почему бы вам не использовать each?

+0

Я мог бы, но это немного медленнее ... что не так с тем, что я делаю? – Jason

+1

Если он работает, я бы не стал слишком расстроен тем, что он медленнее. – alex

+0

Мне все равно хотелось бы узнать из-за того, что я делаю неправильно здесь – Jason

1

jQuery имеет метод .each() для прокрутки элементов коллекции. Вы можете использовать его в качестве такового:

$('.traffic-constraints :input').each(function(index) { 
    if($(this).val() > 0) { 
     doSomething(); 
    } 
}); 

Причина, почему ваш цикл не работает в том, что элементы не распространяются с методами Jquery в. Следующие исправления он:

var constraints = $('.traffic-constraints :input'); 
console.log(constraints); 

var i; 
for (i = 0; i < constraints.length; i++) { 
    if ($(constraints[i]).val() > 0) { 
     doSomething(); 
    } 
} 

Но по причинам кода ремонтопригодности и передового опыта, использовать .each(). Это не заметно медленнее и легче поддерживать и понимать.

+0

спасибо .. да, я забыл обернуть его в $() – Jason

1

Доступ к таким элементам (например, $('.traffic-constraints :input')[0]) возвращает HTML элемент (или узел DOM, чтобы быть более педантичным). Если вы хотите получить элемент jQuery-wrapped, звоните constraints.eq (i)

Смежные вопросы