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=0; i<nElementos; i++) { // comprobamos cada campo
for(var j=0; j<nElementos; j++) { // con cada campo
if( i!=j && 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