Последний элемент в .each() установлен
У меня проблема, когда я делаю простую проверку формы, которая нуждается в некоторых настраиваемых материалах, которые плагин проверки не мог сделать для меня. В принципе, у меня есть имя, адрес электронной почты и поле сообщения, все они требуются, но только электронная почта действительно проверена, остальные просто должны проверить, не являются ли они пустыми. Вот мой текущий код:
$("#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')) {
То, что у меня там, очевидно, неверно, но я не уверен, что можно использовать, чтобы проверить, является ли оно последним в каждом наборе результатов, и выполнить действие, если оно истинно.
Может кто-нибудь помочь мне здесь?
Спасибо заранее.
Ответы
Ответ 1
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');
}
}
});
Ответ 2
В будущем Googlers у меня другой подход, чтобы проверить, является ли последний элемент. Это похоже на последние строки в вопросе OP.
Это напрямую сравнивает элементы, а не просто проверяет номера индексов.
$yourset.each(function() {
var $this = $(this);
if($this[0] === $yourset.last()[0]) {
//$this is the last one
}
});
Ответ 3
Более короткий ответ от здесь, адаптированный к этому вопросу:
var arr = $('.requiredText');
arr.each(function(index, item) {
var is_last_item = (index == (arr.length - 1));
});
Просто для полноты.