Ver Mensaje Individual
  #1 (permalink)  
Antiguo 27/05/2005, 18:35
Silver
 
Fecha de Ingreso: noviembre-2001
Ubicación: México DF
Mensajes: 128
Antigüedad: 23 años, 3 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