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:
Si alguién me ayuda con el script se lo agradeceré inmensamente...<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>
Saludos y gracias de antemano,
Silver