web-dev-qa-db-fra.com

Dernier élément du jeu .each ()

J'ai un problème, alors que je fais une validation de formulaire simple, qui nécessite des éléments personnalisés que le plug-in de validation ne pourrait pas faire pour moi. En gros, j'ai un nom, un email et un champ de message, tous sont obligatoires, mais seulement les emails sont vraiment validés, les autres doivent juste vérifier s'ils ne sont pas vides. Voici mon code actuel:

$("#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;
});

Juste pour expliquer, je vérifie d’abord que l’adresse email est valide via la fonction isValidEmailAddress, qui fonctionne. Ensuite, je vais utiliser each (), tous les champs requiredText et vérifier s'ils ne sont pas vides. Lorsque j'arrive au dernier champ requiredText, je souhaite soumettre le formulaire à l'aide de post ou autre.

if ($(this) == $(this).parent(':last')) { Ce que j'ai ici est évidemment incorrect, mais je ne sais pas ce qui peut être utilisé pour vérifier si c'est le dernier de chaque jeu de résultats et effectuer une action si elle est vraie.

Quelqu'un peut-il m'aider ici?

Merci d'avance.

62
Ryan

each passe dans votre fonction index et element. Vérifiez index par rapport à la longueur du jeu et vous êtes prêt à partir:

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

Pour les futurs Googlers, j'ai une approche différente pour vérifier si c'est le dernier élément. Cela ressemble aux dernières lignes de la question OP.

Cela compare directement les éléments plutôt que de simplement vérifier les numéros d'index.

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

Une réponse plus courte de ici , adaptée à cette question:

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

Juste pour être complet.

2
Kai Noack