Ver Mensaje Individual
  #2 (permalink)  
Antiguo 23/08/2007, 16:53
Avatar de derkenuke
derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 21 años, 4 meses
Puntos: 45
Re: Select con javascript

Hola jotun:


La verdad es que me ha parecido un poquito complicado tu código. No lo he intentado comprender, pero lo he re-hecho dándole más legibilidad y aportándole -creo- más datos (veces de repetición). También me he ahorrado un par de variables. Y he cambiado la manera de obtener los selects. Ahora no hace falta decirle al script el número que tienes, con que sigan el esquema "posicion_actualXX" siendo XX un número entero ya se almacenan en el array. Cuidado si tienes más selects con esa estructura en el documento, habría que capar la obtención únicamente a tu formulario form1, por ejemplo.

Me ha hecho falta declarar una pequeña función cuantasVecesEsta(n) para ver cuántas veces está un valor dado (n) en un array concreto. A partir de ahí el script sale casi sólo, lo más difícil es no comprobar otra vez si se están repitiendo los valores que ya hemos comprobado (saltamos iteraciones dentro del for):

Código PHP:
<html>
<
head>
<
script type="text/javascript">

Array.
prototype.cuantasVecesEsta = function(n) {
    for(var 
i=0cont=0i<this.lengthi++)
        if( 
this[i] === )
            
cont++;
    return 
cont;
}

function 
valida_posicion(){
    
// String para alertar del error
    
var repetidos="";
    
// Almacenamos los values de todos los selects con id posicion_actualXX (XX es un entero) en el array a.
    
var a=new Array(), elSelect;
    for(var 
i=1; (elSelect document.getElementById("posicion_actual"+i) ) ; i++)
        
a[i-1] = elSelect.value;
    
// Ordenamos para que los valores repetidos estén seguidos
    
a.sort();
    
// Comprobamos si hay repeticiones y cuántas hay
    
for(var i=0i<a.lengthi++) {
        var 
cuantosHay a.cuantasVecesEstaa[i] );
        
// El a[i] está cuantosHay veces en el array a;
        
if( cuantosHay ){            // Si hay más de uno, está repetido
            
var interprete document.getElementById"interprete"+(a[i]) ).value;
            var 
cancion document.getElementById"titulo"+(a[i]) ).value;
            
repetidos += "Intérprete: " interprete " - Canción: " cancion ".\n";
            
repetidos += "(repetido "+cuantosHay+" veces)\n\n";
        }
        
// Nos saltamos cuantosHay-1 posiciones en la iteración, para no volver a comprobar los repetidos. El -1 es porque nos hemos contado a nosotros mismos. Así, si hay 1,1,1,2 del primer 1(pos=0) pasamos directamente al 2(pos=3 = 0+3-1, +1 de la iteracion). Si cuantosHay=1 entonces la i no se varía, y se suma 1 en el bucle. cuantosHay no puede ser < 1.
        
+= cuantosHay-1;
    }

    if( 
repetidos != "" ) {            // Ha habido error
        
alert("Posición actual duplicadas en los siguientes artistas: \n\n"+repetidos);
        return 
false;
    }
    else {                            
// Ningún error
        
return confirm("¿Está seguro de guardar estas posiciones?");
    }

}
</script>
</head>


<body>
<form name="form1">
<table>
    <tr>
        <td>
        <select name="posicion_actual1" id="posicion_actual1" >
            <option value="1" >1</option>
            <option value="2" >2</option>
            <option value="3" >3</option>
            <option value="4" >4</option>
            <option value="5" >5</option>
        </select>
        <input type="hidden" name="interprete1" id="interprete1" value="Juan Perez1">
        <input type="hidden" name="titulo1" id="titulo1" value="cancion 1">
        </td>
    </tr>
    <tr>
        <td>
            <select name="posicion_actual2" id="posicion_actual2" >
                <option value="1" >1</option>
                <option value="2" >2</option>
                <option value="3" >3</option>
                <option value="4" >4</option>
                <option value="5" >5</option>
            </select>
            <input type="hidden" name="interprete2" id="interprete2" value="Juan Perez2">
            <input type="hidden" name="titulo2" id="titulo2" value="cancion 2">
        </td>
    </tr>
    <tr>
        <td>
            <select name="posicion_actual3" id="posicion_actual3" >
                <option value="1" >1</option>
                <option value="2" >2</option>
                <option value="3" >3</option>
                <option value="4" >4</option>
                <option value="5" >5</option>
            </select>
            <input type="hidden" name="interprete3" id="interprete3" value="Juan Perez3">
            <input type="hidden" name="titulo3" id="titulo3" value="cancion 3">
        </td>
    </tr>
    <tr>
        <td>
            <select name="posicion_actual4" id="posicion_actual4" >
                <option value="1" >1</option>
                <option value="2" >2</option>
                <option value="3" >3</option>
                <option value="4" >4</option>
                <option value="5" >5</option>
            </select>
            <input type="hidden" name="interprete4" id="interprete4" value="Juan Perez4">
            <input type="hidden" name="titulo4" id="titulo4" value="cancion 4">
        </td>
    </tr>
</table>
<input type="submit" name="validar" value="Validar" onclick="return valida_posicion()">
</form>
</body>
</html> 

Espero que así sea como lo quieres.


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.