.each()中的最后一个元素

我有一个问题,我正在做一个简单的表单validation,需要一些自定义的东西,validation插件不能为我做。 基本上,我有一个名字,电子邮件和消息字段,都是必需的,但只有电子邮件是真正的validation,其他人只需要检查,如果他们不是空的。 这是我现在的代码:

$("#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字段,并检查它们是否不为空。 当我到达最后所需的文本字段,我想提交表单使用后或任何。

if ($(this) == $(this).parent(':last')) {我在那里显然是不正确的,但我不知道什么可以用来检查是否是每个结果集中的最后一个,并且如果是的话执行动作。

有人可以帮我吗?

提前致谢。

each传入你的函数indexelement 。 检查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'); } } }); 

对于未来的Google员工,我有一个不同的方法来检查它是否是最后一个元素。 这与OP问题中的最后一行相似。

这直接比较元素,而不仅仅是检查索引号。

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

从这里得到一个较短的答案,以适应这个问题:

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

只是为了完整。