Последний элемент в наборе .each () - PullRequest
62 голосов
/ 24 октября 2010

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

$("#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, которая работает.Затем я использую each (), все поля requiredText и проверяю, не пусты ли они.Когда я добираюсь до последнего поля requiredText, я хочу отправить форму, используя сообщение или что-то еще.

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

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

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

Ответы [ 3 ]

146 голосов
/ 24 октября 2010

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');
          }
      }
});
10 голосов
/ 06 октября 2016

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

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

$yourset.each(function() {
    var $this = $(this);
    if($this[0] === $yourset.last()[0]) {
        //$this is the last one
    }
});
2 голосов
/ 06 ноября 2017

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

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

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

...