entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

3votos

Comprobar DNI en número dinámico de inputs

Buenas, estoy teniendo problemas para validar un número de entradas de DNI (dinámicas):

$( "form" ).submit(function( event ) {

      $('input.document_number').each(function() {
        var dni = $(this).val();
        var numero, letra;
        var expresion_regular_dni = /^[XYZ]?\d{5,8}[A-Z]$/;

        dni = dni.toUpperCase();

        if(expresion_regular_dni.test(dni) === true){
            numero = dni.substr(0,dni.length-1);
            numero = numero.replace('X', 0);
            numero = numero.replace('Y', 1);
            numero = numero.replace('Z', 2);
            let = dni.substr(dni.length-1, 1);
            numero = numero % 23;
            letra = 'TRWAGMYFPDXBNJZSQVHLCKET';
            letra = letra.substring(numero, numero+1);
            if (letra != let) {
                //alert('Dni erroneo, la letra del NIF no se corresponde');
                event.preventDefault();
                return false;
            }
        else {
                //alert('Dni correcto');
                return true;
            }
        }
      else {
            //alert('Dni erroneo, formato no válido');
            event.preventDefault();
            return false;
        }

      event.preventDefault();
    });

});

Mi idea es que al hacer submit al formulario se recorran todos los inputs con la clase 'document_number' y se validen, sólo completando la acción de submit si todos han pasado la validación.
Saludos y gracias de antemano =)

1voto

magarzon comentado

Y el error que te da es...?

1 Respuesta

5votos

Leonardo-Tadei Puntos227320

Hola @kratos91,

paraq conseguir esto, bastaría con agregar una bandera en la validación y basarse en ella para la respuesta.
Simplificando el código sería:

$( "form" ).submit(function( event ) {

    var flag = true;
    $('input.document_number').each(function() {
        var dni = $(this).val();
        ...
        ...
        if(...
          // Si valida bien...
        ) else {
          // Si no valida
          ...
          flag = false;
        }
    });
    // Fuera del bucle
    return flag;
});

En realidad, la solución más limpia sería tener una función que implemente el bucle con la recorrida de los elementos, y que sea esta función la que devuelva true o false, pero salvo que tengas muchísimos DNI, no creo que haya diferencia en recursos y performance.

Saludos cordiales!

2votos

kratos91 comentado

Justo lo que necesitaba, a veces no se ve lo más simple =)
Mil gracias

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta