2010-10-24 10 views
56

Tengo un problema, donde estoy haciendo una validación de formulario simple, que necesita algunas cosas personalizadas que el complemento de validación no podría hacer por mí. Básicamente, tengo un nombre, un correo electrónico y un campo de 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:Último elemento en .each() establecer

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

Sólo para explicar, estoy comprobando primero la dirección de correo electrónico es válida a través de la función isValidEmailAddress, que está trabajando. Luego estoy usando cada(), todos los campos de texto requeridos y comprobando si no están vacíos. Cuando llegue al último campo de texto obligatorio, quiero enviar el formulario usando una publicación o lo que sea.

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

¿Alguien me puede ayudar aquí?

Gracias de antemano.

+0

se requiereTexto es el nombre de clase para todos los cuadros de texto de entrada? si es así, puede que también tengas una identificación, ¿por qué no simplemente verificas el último elemento con id y luego envías el formulario? – kobe

Respuesta

132

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

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

sí jacob la respuesta es genérica .. – kobe

+1

@Ryan, ver mi respuesta actualizada. –

+0

Ah sí lo tengo. Gracias montón compañero. – Ryan

9

Para los futuros empleados de Google que he un enfoque diferente para comprobar si se trata de último elemento. Es similar a las últimas líneas en la pregunta OP.

Compara directamente los elementos en lugar de simplemente verificar los números índices.

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

Una respuesta más corta de here, adaptado a esta pregunta: ¿

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

simplemente para la corrección.

Cuestiones relacionadas