Ver Mensaje Individual
  #4 (permalink)  
Antiguo 16/10/2007, 15:53
Avatar de derkenuke
derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 21 años, 1 mes
Puntos: 45
Re: Validar campos - Campos no iguales

Hola a los dos:

Erickvk, veo un fallo en tu planteamiento: Un campo se comprueba con sí mismo, por lo tanto siempre se suma una unidad a cont. Por otra parte, si un campo A se repite con B, B se repite también con A, luego cont no sumara 1 (una repetición) sino 2 unidades.


Aquí va un esbozo:

Código PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
>
<
html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es">
<
head>
<
meta http-equiv="Content-type" content="text/html;charset=iso-8859-1" />
<
meta name="Author" content="derkeNuke" />
<
title>Página nueva</title>
<
style type="text/css">

</
style>
</
head>

<
body>

<
form action="">

    
0. <input type="text" value="bar" /><br/>
    
1. <input type="text" value="bara" /><br/>
    
2. <input type="text" value="barb" /><br/>
    
3. <input type="text" value="barc" /><br/>
    
4. <input type="text" value="bard" /><br/>
    
5. <input type="text" value="foo" /><br/>
    
6. <input type="text" value="fooa" /><br/>
    
7. <input type="text" value="foob" /><br/>
    
8. <input type="text" value="fooc" /><br/>
    
9. <input type="text" value="food" /><br/>
    
10. <input type="text" value="fooe" /><br/>
    
11. <input type="text" value="foof" /><br/>
    
12. <input type="text" value="foog" /><br/>

    <
button type="button" onclick="comprobarRepetidos(this.form)">comprobarRepetidos()</button>

</
form>

<
script type="text/javascript">
<!--



function 
comprobarRepetidos(fr) {
    var 
elementos fr.elements;
    var 
nElementos elementos.length;
    var 
strFinal "";
    for(var 
i=0i<nElementosi++) {        // comprobamos cada campo
        
for(var j=0j<nElementosj++) {    // con cada campo
            
if( i!=&& elementos[i].tagName.toUpperCase()=="INPUT" && elementos[i].tagName.toUpperCase()=="INPUT" &&
                
elementos[i].type.toUpperCase()=="TEXT" && elementos[j].type.toUpperCase()=="TEXT" ) {
                if( 
elementos[i].value == elementos[j].value ) {
                    
strFinal += "El campo número "+i+" se repite con el número "+j+". Cambie alguno de los dos.\n\r";
                }
            }
        }
    }
    if( 
strFinal == "" ) {
        
alert("No hubo ningún campo repetido");
    }
    else {
        
alert("Hubo los siguientes errores: \n\r" strFinal );
    }
}

// -->
</script>

</body>
</html> 
Lo único que no he tenido en cuenta es ésto último, que si un campo se repite, el error sale dos veces (invertido). Para no hacer aparecer dos veces el mismo error habría que hacer unas virguerías que todavía no se me han ocurrido hacerlas de forma sencilla. Más sobretodo si se repiten los valores de tres campos, que entonces se vuelve horrible.


Advierto que el script es lento (ya lo has comentado tú) con 12 elementos (132 comprobaciones si no me equivoco), pero es que con 30 serían 870 comprobaciones de elementos y sus valores, algo árduo. ¿Qué se escribe en los campos? Quizá podamos encontrar algún algoritmo más rápido y cómodo (ya estoy pensando en alguno). Por ejemplo meter todos los valores de los campos en un array, ordenarlo, y comprobar el anterior con el siguiente. O si son 30 y se hace muy pesado con expresiones regulares y armando un String con los valores.




Bueno, seguiremos mejorando la cosa.

Un saludo
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.