web-dev-qa-db-ja.com

.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関数を介して電子メールアドレスが有効であることを確認しています。次に、each()、すべてのrequiredTextフィールドを使用して、それらが空でないかどうかを確認します。最後のrequiredTextフィールドに到達したら、postなどを使用してフォームを送信します。

if ($(this) == $(this).parent(':last')) {私が持っているものは明らかに間違っていますが、それが各結果セットの最後であるかどうかを確認し、trueの場合はアクションを実行するために使用できるものがわかりません。

誰でもここで私を助けることができますか?

前もって感謝します。

62
Ryan

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

将来のGoogle社員向けに、最後の要素かどうかを確認するための別のアプローチを採用しています。 OP質問の最後の行に似ています。

これは、単にインデックス番号をチェックするのではなく、要素を直接比較します。

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

here からの短い回答、この質問に適応:

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

完全を期すためだけに。

2
Kai Noack