我有一个问题,我在做一个简单的表单验证,需要一些验证插件无法为我做的自定义内容。基本上,我有一个名称,电子邮件和消息字段,所有都是必需的,但只有电子邮件确实有效,其他人只需要检查它们是否为空。这是我目前的代码:
$("#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字段时,我想使用post或其他任何方式提交表单。
if ($(this) == $(this).parent(':last')) {
我所拥有的内容显然是不正确的,但我不确定可以用来检查它是否是每个结果集中的最后一个,如果为true则执行操作。
有人可以帮我吗?
提前致谢。
答案 0 :(得分:145)
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');
}
}
});
答案 1 :(得分:10)
对于未来的Google员工,我有一种不同的方法来检查它是否是最后一个元素。它类似于OP问题中的最后几行。
这直接比较元素而不仅仅是检查索引号。
$yourset.each(function() {
var $this = $(this);
if($this[0] === $yourset.last()[0]) {
//$this is the last one
}
});
答案 2 :(得分:2)
来自here的较短答案,适用于此问题:
var arr = $('.requiredText');
arr.each(function(index, item) {
var is_last_item = (index == (arr.length - 1));
});
只是为了完整。