Foros del Web » Programando para Internet » Javascript »

Listas mutuamente excluyentes (combobox)

Estas en el tema de Listas mutuamente excluyentes (combobox) en el foro de Javascript en Foros del Web. Saludos, aquí tengo este código al que le hice varias adaptaciones hasta que finalmente me funciona exactamente como yo quiero... PERO.... SOLO FUNCIONA EN INTERNET ...
  #1 (permalink)  
Antiguo 27/05/2005, 18:35
 
Fecha de Ingreso: noviembre-2001
Ubicación: México DF
Mensajes: 128
Antigüedad: 22 años, 5 meses
Puntos: 0
Listas mutuamente excluyentes (combobox)

Saludos,
aquí tengo este código al que le hice varias adaptaciones hasta que finalmente me funciona exactamente como yo quiero... PERO.... SOLO FUNCIONA EN INTERNET EXPLORER... está claro que el motivo de que no funcione en Mozilla (por ejemplo) es el uso de comboBox.add(new Option...., pero la solución no es utilizar [I]options para que sea compatible con IE, pues me da entonces errores inexplicables.

El script genera 4 combobox con las opciones disponibles, cada vez que se selecciona una en cualquier combobox ésta se excluye de los otros 3.
El script original fue sacado de este foro (no recuerdo bien si fue posteado por tunait) pero tuve que hacerle modificaciones pues el original ya tiene opciones predeterminadas en cada combobox (yo los necesito vacios inicialmente) además de que tampoco funciona en Mozilla.

Aquí va el código (incluí también el HTML para que solo tengan que copiar+pegar)

Código:
<html>
    <head>
        <title>ComboBox mutuamente excluyentes</title>
        <script language="JavaScript1.2">
            var numCombos = 4;
            var _nombres = "Proyectos";
            var proyectos = new Array("Pro1", "Pro2", "Pro3", "Pro4", "Pro5", "Pro6", "Pro7");
			
            function initializeCombos(){
                for(var j = 0; j < document.frm.elements.length; j++){
                    if(document.frm.elements[j].type == "select-one"){ 
                        document.frm.elements[j].options[0] = new Option("Selecciona...", "empty");
                        for(var m = 1; m <= proyectos.length; m++){
                            document.frm.elements[j].options[m] = new Option(proyectos[m-1], proyectos[m-1]);
                        } 
                    }
                }
                updateOptions();
            }
			
            function updateOptions(){
                for (var n = 0; n < numCombos; n++) {
                    var comboBox = eval('document.frm.'+_nombres + n);  // tomar el combo
                    selectedValue = comboBox.value; // guardar su opcion actualmente seleccionada
                    comboBox.options.length = 0;  // vaciar su lista opciones
                    comboBox.options[0] = new Option("Selecciona...", "empty");
                    for (var m = 1; m <= proyectos.length; m++) { // recorrer toda la lista de opciones posibles
                        unselected=true; 
                        for (o=0; o<numCombos; o++) { //  para cada combo visible 
                            if (n!=o) { // que no sea el que estoy tratando
                                var otherComboBox = eval('document.frm.'+_nombres + o); // tomar el combo
                                // determinar si la opcion esta seleccionada
                                if (document.frm.hiddenCombo.options[m].value==otherComboBox.value)
                                    unselected = false;
                            }
                        }
                        if (unselected) { // añadirle todas menos las que esten seleccionadas
                            comboBox.add(new Option(document.frm.hiddenCombo.options[m].text,document.frm.hiddenCombo.options[m].value));
                        }
                    } 
                    comboBox.value = selectedValue;
                }
            }
			
        </script>
    </head>

    <body>
        <form name="frm">
            <select name="hiddenCombo" style="display:none"> 
    		<script language="JavaScript1.2">
                    document.write('<option value="empty">Selecciona...</option>');
                    for (var n = 0; n < proyectos.length; n++) {
                        document.write('<option value="'+proyectos[n]+'">'+proyectos[n]+'</option>');
                    }
                </script> 
            </select> 
            <script language="JavaScript1.2">
                for (var i=0; i < numCombos; i++) {
                    document.write("<select name='"+_nombres+i+"' onChange='updateOptions(this);'>");
                    document.write("</select><br><br>");
                }
                initializeCombos();
            </script>
        </form>
    </body>
</html>
Si alguién me ayuda con el script se lo agradeceré inmensamente...
Saludos y gracias de antemano,
Silver
__________________
Nuedi Servicios SA de CV
http://www.nuedi.mx
  #2 (permalink)  
Antiguo 30/05/2005, 08:15
 
Fecha de Ingreso: noviembre-2001
Ubicación: México DF
Mensajes: 128
Antigüedad: 22 años, 5 meses
Puntos: 0
Alguna sugerencia, por favor...

Please, alguna sugerencia... o alguien que tenga un código que haga esto que necesito... por si acaso les da pereza probar el código anterior... les explico qué hace y qué necesito...
Qué hace:
Muestra 4 combobox, rellenos con 7 opciones, pero por default están en la opción 0 ("seleccione su opción"), cada vez que se seleccione una opción en un combobox se rellenará los otros eliminando las opciones que ya están seleccionadas en algún combobox... ya todo eso lo hace el código que postee en el mensaje anterior, pero solo funciona en IE.
Qué necesito:
Que funcione en el resto de los navegadores.

1000000000 de gracias,
Silver
__________________
Nuedi Servicios SA de CV
http://www.nuedi.mx
  #3 (permalink)  
Antiguo 30/05/2005, 08:44
Avatar de Holden  
Fecha de Ingreso: enero-2002
Ubicación: Buenos Aires
Mensajes: 326
Antigüedad: 22 años, 3 meses
Puntos: 4
necesitas algo mas o menos asi?

fijate si entendes y si lo podes adaptar a tus necesidades.
Saludos.
__________________
Holden-@r
http://www.hvaldez.com.ar
  #4 (permalink)  
Antiguo 30/05/2005, 09:15
 
Fecha de Ingreso: noviembre-2001
Ubicación: México DF
Mensajes: 128
Antigüedad: 22 años, 5 meses
Puntos: 0
Gracias Holden por tu respuesta, pero el ejemplo muestra dos combos relacionados... o sea, cuando seleccionas algo en el primero te muestra en el segundo opciones propias para él... en este caso lo que necesito es no que estén relacionados sino que se excluyan valores... por ejemplo, si tenemos dos combos, en ambos tenemos las opciones: opc1, opc2, opc3 y opc4... ambos combos están por default en "seleccione su opción", cuando en el primer combo seleccione opc3, se rellene el segundo combo con opc1, opc2 y opc4, o sea, se eliminó opc3 de la lista, pues ya está seleccionado en el primer combo... pero te repito, ya todo eso lo hace el código que postee en el primer mensaje, lo puedes probar, solo que usa funciones para agregar las opciones de forma dinámica a los combos que solo funcionan en Internet Explorer y necesito una que funcione con todos los exploradores.
saludos y gracias por la rápida respuesta,
Silver
__________________
Nuedi Servicios SA de CV
http://www.nuedi.mx
  #5 (permalink)  
Antiguo 30/05/2005, 14:33
Avatar de Holden  
Fecha de Ingreso: enero-2002
Ubicación: Buenos Aires
Mensajes: 326
Antigüedad: 22 años, 3 meses
Puntos: 4
ahhh... ahi entendi bueno si aun sigues sin solución en un hueco que tenga te lo hago... AVISAME.

Saludos.
__________________
Holden-@r
http://www.hvaldez.com.ar
  #6 (permalink)  
Antiguo 30/05/2005, 15:05
 
Fecha de Ingreso: noviembre-2001
Ubicación: México DF
Mensajes: 128
Antigüedad: 22 años, 5 meses
Puntos: 0
Sigo sin solución... si tienes el tiempo, por favor, ayúdame con eso.... gracias!!!!
__________________
Nuedi Servicios SA de CV
http://www.nuedi.mx
  #7 (permalink)  
Antiguo 30/05/2005, 15:07
Avatar de Prince  
Fecha de Ingreso: mayo-2003
Ubicación: DF
Mensajes: 574
Antigüedad: 21 años
Puntos: 1
No silver... pues ya nos jod... creo que tenemos que investigar como hacerlo nosotros
__________________
- P R I N C E -
  #8 (permalink)  
Antiguo 30/05/2005, 19:20
Avatar de Holden  
Fecha de Ingreso: enero-2002
Ubicación: Buenos Aires
Mensajes: 326
Antigüedad: 22 años, 3 meses
Puntos: 4
Bueno aca te dejo un ejemplo tal cual lo pediste fijate si funca con todos los browsers. Estoy seguro que deberia ya que use el dom de js.
fijate aca

Me debes un whisky jajajaja.
__________________
Holden-@r
http://www.hvaldez.com.ar
  #9 (permalink)  
Antiguo 31/05/2005, 09:40
 
Fecha de Ingreso: noviembre-2001
Ubicación: México DF
Mensajes: 128
Antigüedad: 22 años, 5 meses
Puntos: 0
¡¡¡¡¡¡¡¡¡¡¡ TE GANASTE EL WHISKY !!!!!!!!!!!!!!
Me has recompuesto varias noches de insomnio!!
Gracias amigo,
Silver
__________________
Nuedi Servicios SA de CV
http://www.nuedi.mx
  #10 (permalink)  
Antiguo 31/05/2005, 09:43
Avatar de Holden  
Fecha de Ingreso: enero-2002
Ubicación: Buenos Aires
Mensajes: 326
Antigüedad: 22 años, 3 meses
Puntos: 4
Alegrome que funcione.
despues arreglamos lo del whisky ;)

Saludo2
__________________
Holden-@r
http://www.hvaldez.com.ar
  #11 (permalink)  
Antiguo 09/06/2005, 19:29
Avatar de Tarecito  
Fecha de Ingreso: noviembre-2003
Ubicación: Lima - Perú
Mensajes: 443
Antigüedad: 20 años, 5 meses
Puntos: 1
eteeeee, y para q filtre el segundo combo dependiendo del valor seleccionado del primero?? bueno yo tengo un primer combo con datos de Areas y un segundo combo con datos de Sub-Areas, si elijo x ejemplo Contabilidad en el primer combo en el segundo me debe mostrar sólo los datos correspondientes al area q elegi en el primer combo. El detalle es q los datos de los combos los estoy jalando desde una base de datos y necesito ese filtrado pero sin q haga ningún Submit... me expliqué bien??
__________________
Tarecito
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 05:07.