2010-10-24 2 views
56

У меня проблема, когда я делаю простую проверку формы, которая нуждается в некоторых настраиваемых материалах, которые плагин проверки не мог сделать для меня. В принципе, у меня есть имя, адрес электронной почты и поле сообщения, все они требуются, но только электронная почта действительно проверена, остальные просто должны проверить, не являются ли они пустыми. Вот мой текущий код:Последний элемент в .each() set

$("#contactMe form").submit(function() { 
    var email = $('.requiredEmail').val(); 
    if(email != 0) { 
     if(isValidEmailAddress(email)) { 
      $('.requiredText').each(function() { 
       thisVal = $(this).val(); 
       var $this = $(this); 
       if(thisVal != 0) { 
        console.log('Valid Field: '+thisVal); 
        if ($(this) == $(this).parent(':last')) { 
         console.log('Last field, submit form here'); 
        } 
       } 
      }); 
     } else { 
      console.log('Email Not Valid'); 
     } 
    } 
    return false; 
}); 

Просто объяснить, я первый проверки электронной почты является действительным с помощью функции isValidEmailAddress, которая работает. Затем я использую каждое(), все необходимые поля Text и проверяя, не являются ли theyre пустыми. Когда я дойду до последнего поля requiredText, я хочу отправить форму, используя сообщение или что-то еще.

if ($(this) == $(this).parent(':last')) { То, что у меня есть, очевидно, неверно, но я не уверен, что можно использовать, чтобы проверить, является ли оно последним в каждом наборе результатов, и выполнить действие, если оно истинно.

Может ли кто-нибудь помочь мне здесь?

Заранее спасибо.

+0

is requiredText - это имя класса для всех введенных текстовых полей? если так, у вас может быть и id, то почему бы вам просто не проверить последний элемент с id, а затем отправить форму. – kobe

ответ

132

each переходит в вашу функцию index и element. Проверьте index от длины набора, и вы хорошо идти:

var set = $('.requiredText'); 
var length = set.length; 
set.each(function(index, element) { 
     thisVal = $(this).val(); 
     if(parseInt(thisVal) !== 0) { 
      console.log('Valid Field: ' + thisVal); 
      if (index === (length - 1)) { 
       console.log('Last field, submit form here'); 
      } 
     } 
}); 
+0

да jacob ответ общий .. – kobe

+1

@Ryan, см. Мой обновленный ответ. –

+0

Ах да это получилось. Спасибо, куча мат. – Ryan

9

Для будущих Googlers я имею другой подход, чтобы проверить, если это последний элемент. Это похоже на последние строки в вопросе ОП.

Это прямое сравнение элементов, а не просто проверка номеров индексов.

$yourset.each(function() { 
    var $this = $(this); 
    if($this[0] === $yourset.last()[0]) { 
     //$this is the last one 
    } 
}); 
0

Более короткий ответ от here, адаптированный к этому вопросу:

var arr = $('.requiredText'); 
arr.each(function(index, item) { 
    var is_last_item = (index == (arr.length - 1)); 
}); 

Просто для полноты картины.

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