Foros del Web » Programando para Internet » Javascript »

3 o mas combos dependientes excluyentes

Estas en el tema de 3 o mas combos dependientes excluyentes en el foro de Javascript en Foros del Web. Hola: Alguna pista de como hacer 3 combos excluyentes dependientes ? EJ: Valores Combo 1: 3 , 2, 5, 9, 11, 13, 1 Valores Combo ...
  #1 (permalink)  
Antiguo 14/12/2011, 08:14
 
Fecha de Ingreso: enero-2003
Mensajes: 120
Antigüedad: 21 años, 10 meses
Puntos: 0
3 o mas combos dependientes excluyentes

Hola:
Alguna pista de como hacer 3 combos excluyentes dependientes ?

EJ:

Valores Combo 1: 3 , 2, 5, 9, 11, 13, 1
Valores Combo 2: 3 , 2, 5, 9, 11, 13, 1
Valores Combo 3: 3 , 2, 5, 9, 11, 13, 1


Cuando selecciono el valor 2 en combo1 en combo2 y combo3 debe desaparecer el 2....

Valores Combo 2: 3 , 5, 9, 11, 13, 1
Valores Combo 3: 3 , 5, 9, 11, 13, 1


Cuando selecciono el valor 5 en combo2 en combo3 debe desaparecer el 5....

Valores Combo 3: 3 , 9, 11, 13, 1


Pero como el operador siempre mete el dedo donde el programador no ve... quisiera que siempre se haga la verificación de todos los combos, o sea puede ser en cualquier orden, si pincha el 3 y elige uno, en los otros debe desaparecer...

mmm... es medio complicado porque si eligió primero el 11 en combo1 y cuando terminó con todos, se arrepiente y en el primero iba el 13, lo puede seleccionar pero el 11 debe reaparecer en los otros.

Necesito una mano.

Muchas gracias compañeros.
__________________
Sergio.
  #2 (permalink)  
Antiguo 14/12/2011, 08:59
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 16 años, 5 meses
Puntos: 1012
Respuesta: 3 o mas combos dependientes excluyentes

prueba esto
Cita:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta name="http-equiv" content="Content-type: text/html; charset=UTF-8"/>
<script type="text/javascript">
function getElement(elElemento) {
return document.getElementById(elElemento);
}


var vuelta = 0;
var ok = '';
var eliminadosVal = new Array();
function delOpcion(val) {
var valores = new Array();
var count = 1;
eliminados = 0;

if (val.id == ok && vuelta >= 1) {alert('Antes de elegir otra opción de este select, has de restablecer la última opción'); val.options[0].selected = 'selected'; return;}

var combo = val.name;
var f = document.form1;

for (var i = 0; val.options[i]; i++) {

if (i == val.selectedIndex) {

for (var n = 0, sel = f[combo].length; n < sel; n++) {

if (val.id != f[combo][n].id) {

for (var p = 0; f[combo][n].options[p]; p++) {

if (val.value == f[combo][n].options[p].value) {

eliminados++;
valores.push(new Array(val.value,p,f[combo][n].id,val,eliminados));
if (count == 1) {
eliminadosVal.push(new Array(valores));
}
getElement(f[combo][n].id).options[p] = null;
count++;
vuelta ++;
break;
}

}

}

}
break;

}

}

ok = val.id;

var lista_elementos = '';
for (var i = 0; i < eliminadosVal.length; i++) {
for (var p = 0; p < eliminadosVal[i].length; p++) {
lista_elementos += '<li>' + eliminadosVal[i][p][0][0] + ' <a class="restaurar" href="#" onclick="Redo('+i+');return false;">x</a></li>';
}
}

getElement('listaEliminados').innerHTML = lista_elementos;
}









function Redo(arr) {
vuelta = 0;
var lista_elementos = '';
for (var i = 0; i < eliminadosVal[arr].length; i++) {

for (var p = 0; p < eliminadosVal[arr][i].length; p++) {

var reDoOpciones = new Option(eliminadosVal[arr][i][p][0], eliminadosVal[arr][i][p][0]);

if (getElement(eliminadosVal[arr][i][p][2]).options.length == eliminadosVal[arr][i][p][1]) { // Si es la última opción

eval(getElement(eliminadosVal[arr][i][p][2]).options[eliminadosVal[arr][i][p][1]] = reDoOpciones);

} else {

opt = getElement(eliminadosVal[arr][i][p][2]).options.length;

for (var n = getElement(eliminadosVal[arr][i][p][2]).options.length-1; n >= eliminadosVal[arr][i][p][1]; n--) {


var reInsertaOpt = new Option(getElement(eliminadosVal[arr][i][p][2]).options[n].text, getElement(eliminadosVal[arr][i][p][2]).options[n].value);
eval(getElement(eliminadosVal[arr][i][p][2]).options[opt] = reInsertaOpt);
opt--;
}

eval(getElement(eliminadosVal[arr][i][p][2]).options[eliminadosVal[arr][i][p][1]] = reDoOpciones);
}

eliminadosVal[arr][i][p][3].options[0].selected = 'selected'; // Seleccionamos la primera opción de los select en los que ya ha sido selecciona una opción repetida en otro select


}
eliminadosVal[arr].pop();
}



for (var i = 0; i < eliminadosVal.length; i++) {
for (var p = 0; p < eliminadosVal[i].length; p++) {
lista_elementos += '<li>' + eliminadosVal[i][p][0][0] + ' <a class="restaurar" href="#" onclick="Redo('+i+');return false;">x</a></li>';
}
}

getElement('listaEliminados').innerHTML = lista_elementos;
}
</script>
</head>
<body>
Si la opci&oacute;n seleccionada, est&aacute; en los siguientes combos, se eliminar&aacute;<br />
<form id="form1" name="form1" method="post" action="">
<select id="regalo_1" name="regalo[]" size="10" onchange="delOpcion(this)">
<option value="">Regalo para Ti</option>
<option value="Moto">Moto</option>
<option value="Coche">Coche</option>
<option value="Barco">Barco</option>
<option value="Bicicleta">Bicicleta</option>
</select>

<select id="regalo_2" name="regalo[]" size="10" onchange="delOpcion(this)">
<option value="">Regalo para Padres</option>
<option value="Moto">Moto</option>
<option value="Coche">Coche</option>
<option value="Barco">Barco</option>
<option value="Bicicleta">Bicicleta</option>
</select>

<select id="regalo_3" name="regalo[]" size="10" onchange="delOpcion(this)">
<option value="">Regalo para Hermanos</option>
<option value="Moto">Moto</option>
<option value="Coche">Coche</option>
<option value="Barco">Barco</option>
<option value="Bicicleta">Bicicleta</option>
</select>
</form>

<ul id="listaEliminados"></ul>
</body>
</html>
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}
  #3 (permalink)  
Antiguo 14/12/2011, 09:27
 
Fecha de Ingreso: enero-2003
Mensajes: 120
Antigüedad: 21 años, 10 meses
Puntos: 0
Respuesta: 3 o mas combos dependientes excluyentes

Guau! me lo diste hecho! muchas gracias!!! gracias gracias!!!!


Si elijo Coche, bicicleta, y barco...

elimino bicicleta de abajo... se despelota todo... pero la idea está... lo reivsaré.
__________________
Sergio.

Última edición por serbarmax; 14/12/2011 a las 09:33

Etiquetas: combos, dependientes
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:41.