Ver Mensaje Individual
  #6 (permalink)  
Antiguo 20/10/2010, 14:45
Avatar de IsaBelM
IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: eliminar y restaurar opciones select

lamento no haber respondido antes, pero hoy no he tenido nada de tiempo. he hecho lo que me indicas y esto es lo que he conseguido. al mismo tiempo, le he quitado el botón y he listado las opciones. continua dando problemas en ciertas situaciones, pero creo que puedo corregirlas
Código Javascript:
Ver original
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta name="http-equiv" content="Content-type: text/html; charset=UTF-8"/>
  5. <script type="text/javascript">
  6. function getElement(elElemento) {
  7. return document.getElementById(elElemento);
  8. }
  9.  
  10.  
  11. var vuelta = 0;
  12. var ok = '';
  13. var eliminadosVal = new Array();  
  14. function delOpcion(val) {
  15. var valores = new Array();
  16. var count = 1;
  17. eliminados = 0;
  18.  
  19. 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;}
  20.  
  21. var combo = val.name;
  22. var f = document.form1;
  23.  
  24. for (var i = 0; val.options[i]; i++) {
  25.  
  26.     if (i == val.selectedIndex) {
  27.  
  28.         for (var n = 0, sel = f[combo].length; n < sel; n++) {
  29.  
  30.             if (val.id != f[combo][n].id) {
  31.  
  32.                 for (var p = 0; f[combo][n].options[p]; p++) {
  33.  
  34.                     if (val.value == f[combo][n].options[p].value) {
  35.  
  36.                         eliminados++;
  37.                         valores.push(new Array(val.value,p,f[combo][n].id,val,eliminados));
  38.                             if (count == 1) {
  39.                                 eliminadosVal.push(new Array(valores));
  40.                             }                      
  41.                         getElement(f[combo][n].id).options[p] = null;
  42.                         count++;
  43.                         vuelta ++;
  44. break;
  45.                     }
  46.  
  47.                 }
  48.  
  49.             }
  50.  
  51.         }
  52. break;
  53.  
  54.     }
  55.  
  56. }
  57.  
  58. ok = val.id;
  59.  
  60. var lista_elementos = '';
  61.     for (var i = 0; i < eliminadosVal.length; i++) {
  62.         for (var p = 0; p < eliminadosVal[i].length; p++) {
  63.             lista_elementos += '<li>' + eliminadosVal[i][p][0][0] + ' <a class="restaurar" href="#" onclick="Redo('+i+');return false;">x</a></li>';
  64.         }
  65.     }
  66.  
  67. getElement('listaEliminados').innerHTML =  lista_elementos;
  68. }
  69.  
  70.  
  71.  
  72.  
  73.  
  74.  
  75.  
  76.  
  77.  
  78. function Redo(arr) {
  79. vuelta = 0;
  80. var lista_elementos = '';
  81. for (var i = 0; i < eliminadosVal[arr].length; i++) {
  82.  
  83.     for (var p = 0; p < eliminadosVal[arr][i].length; p++) {
  84.  
  85.         var reDoOpciones = new Option(eliminadosVal[arr][i][p][0], eliminadosVal[arr][i][p][0]);
  86.  
  87.         if (getElement(eliminadosVal[arr][i][p][2]).options.length == eliminadosVal[arr][i][p][1]) { // Si es la última opción
  88.            
  89.             eval(getElement(eliminadosVal[arr][i][p][2]).options[eliminadosVal[arr][i][p][1]] = reDoOpciones);
  90.  
  91.         } else {
  92.  
  93.             opt = getElement(eliminadosVal[arr][i][p][2]).options.length;
  94.  
  95.             for (var n = getElement(eliminadosVal[arr][i][p][2]).options.length-1; n >= eliminadosVal[arr][i][p][1];  n--) {
  96.  
  97.            
  98.                 var reInsertaOpt = new Option(getElement(eliminadosVal[arr][i][p][2]).options[n].text, getElement(eliminadosVal[arr][i][p][2]).options[n].value);  
  99.                 eval(getElement(eliminadosVal[arr][i][p][2]).options[opt] = reInsertaOpt);
  100.             opt--;
  101.             }
  102.  
  103.                 eval(getElement(eliminadosVal[arr][i][p][2]).options[eliminadosVal[arr][i][p][1]] = reDoOpciones);
  104.         }
  105.  
  106.         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
  107.        
  108.  
  109.     }
  110. eliminadosVal[arr].pop();
  111. }
  112.  
  113.  
  114.  
  115. for (var i = 0; i < eliminadosVal.length; i++) {
  116.     for (var p = 0; p < eliminadosVal[i].length; p++) {
  117.         lista_elementos += '<li>' + eliminadosVal[i][p][0][0] + ' <a class="restaurar" href="#" onclick="Redo('+i+');return false;">x</a></li>';
  118.     }
  119. }
  120.  
  121. getElement('listaEliminados').innerHTML =  lista_elementos;
  122. }
  123. </script>
  124. </head>
  125. <body>
  126. <form id="form1" name="form1" method="post" action="">
  127. <select id="regalo_1" name="regalo[]" size="10" onchange="delOpcion(this)">
  128. <option value="">Regalo para Ti</option>
  129. <option value="Moto">Moto</option>
  130. <option value="Coche">Coche</option>
  131. <option value="Barco">Barco</option>
  132. <option value="Bicicleta">Bicicleta</option>
  133. </select>
  134.  
  135. <select id="regalo_2" name="regalo[]" size="10" onchange="delOpcion(this)">
  136. <option value="">Regalo para Padres</option>
  137. <option value="Coche">Coche</option>
  138. <option value="Casa">Casa</option>
  139. <option value="Viaje">Viaje</option>
  140. <option value="Moto">Moto</option>
  141. </select>
  142.  
  143. <select id="regalo_3" name="regalo[]" size="10" onchange="delOpcion(this)">
  144. <option value="">Regalo para Hermanos</option>
  145. <option value="Consola">Consola</option>
  146. <option value="Bicicleta">Bicicleta</option>
  147. <option value="Moto">Moto</option>
  148. <option value="Mp4">Mp4</option>
  149. </select>
  150. </form>
  151.  
  152. <ul id="listaEliminados"></ul>
  153. </body>
  154. </html>
gracias por analizar el código y prestarme tu ayuda