【问题标题】:Last element in .each() set.each() 集合中的最后一个元素
【发布时间】:2011-04-29 17:46:40
【问题描述】:

我有一个问题,我正在做一个简单的表单验证,需要一些自定义的东西,验证插件无法为我做。基本上,我有一个姓名,电子邮件和消息字段,都是必需的,但只有电子邮件是真正验证的,其他只需要检查它们是否不为空。这是我当前的代码:

$("#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')) { 我所拥有的显然不正确,但我不确定可以使用什么来检查它是否是每个结果集中的最后一个,如果为真则执行操作。

有人可以帮我吗?

提前致谢。

【问题讨论】:

  • is requiredText 是所有输入文本框的类名吗?如果是这样,您的 id 也可能是正确的,为什么不简单地使用 id 验证最后一个元素,然后提交表单。

标签: jquery each


【解决方案1】:

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');
          }
      }
});

【讨论】:

  • 啊,明白了。谢谢大佬。
  • 两次编写选择器看起来不太好,但似乎在这里工作。
  • 为什么需要检查最后一个元素?只需将代码放在循环之后即可。
  • @Marco 有时我们可能希望在除最后一次之外的每个迭代中都做一些事情。
  • 但这不是 OP 所质疑的。
【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:

    来自here 的简短回答,适用于这个问题:

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

    只是为了完整性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-07
      • 1970-01-01
      • 1970-01-01
      • 2015-01-07
      • 2012-01-11
      • 2022-08-17
      • 2012-03-11
      • 2020-11-06
      相关资源
      最近更新 更多