Último elemento en.cada conjunto ()


Tengo un problema, donde estoy haciendo una validación de formulario simple, que necesita algunas cosas personalizadas que el plugin de validación no podría hacer por mí. Básicamente, tengo un campo de nombre, correo electrónico y mensaje, todos son obligatorios, pero solo el correo electrónico está realmente validado, los demás solo necesitan verificar si no están vacíos. Aquí está mi código actual:

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

Solo para explicar, primero estoy verificando que la dirección de correo electrónico sea válida a través de la función isValidEmailAddress, que está funcionando. Entonces estoy pasando por el uso cada (), todos los campos requiredText y comprobando si no están vacíos. Cuando llegue al último campo requiredText, quiero enviar el formulario usando post o lo que sea.

if ($(this) == $(this).parent(':last')) { Lo que tengo allí es obviamente incorrecto, pero no estoy seguro de lo que se puede utilizar para comprobar si es el último en cada conjunto de resultados, y realizar una acción si es verdadero.

¿Alguien puede ayudarme?

Gracias de antemano.

 58
Author: Will, 2010-10-24

3 answers

each pasa a la función index y element. Compruebe index contra la longitud del conjunto y ya está listo:

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');
          }
      }
});
 142
Author: Jacob Relkin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-06-27 09:21:05

Para futuros Googlers tengo un enfoque diferente para comprobar si es el último elemento. Es similar a las últimas líneas en la pregunta OP.

Esto compara directamente los elementos en lugar de simplemente verificar los números de índice.

$yourset.each(function() {
    var $this = $(this);
    if($this[0] === $yourset.last()[0]) {
        //$this is the last one
    }
});
 10
Author: Ergec,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-10-06 07:21:31

Una respuesta más corta de aquí , adaptada a esta pregunta:

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

Solo para completar.

 0
Author: Kai Noack,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-11-06 10:48:48