Ver Mensaje Individual
  #2 (permalink)  
Antiguo 21/10/2014, 17:23
Avatar de Alexis88
Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Gestión de contenido dinámico

Cuando mencionas lo de "dinámico", supongo que te refieres a tener una lista de datos variables, la cual será alimentada manualmente o desde una base de datos. Supongamos que sea mediante una BD, entonces, lo que podrías hacer es recolectar todos los datos encontrados en la BD y devolver un array de objetos en donde cada uno contendrá a cada nombre de la tabla en la BD. Un ejemplo:

Código PHP:
Ver original
  1. /******************** personas.php ********************/
  2.  
  3. //Acá realizas tu conexión a la BD y luego viene el resto
  4. $query = mysqli_query($conexion, 'SELECT nombre FROM personas') or exit ('¡Error!');
  5. if (mysqli_num_rows($query)){
  6.     $nombres = array();
  7.     while ($row = mysqli_fetch_array($query)){
  8.         $nombres[] = array('nombre' => $row['nombre']);
  9.     }
  10.     mysqli_free_result($query);
  11.     echo json_encode($nombres);
  12. }

El proceso es simple. Hago una búsqueda en la BD y, si obtengo resultados, creo un array al cual alimentaré con otros arrays en donde cada uno contendrá a cada nombre de tabla de la BD. Al final, retorno este conjunto en forma de objeto JSON. La idea es que este proceso se ejecute como respuesta a una petición asíncrona (Ajax) desde el archivo inicial (en donde está el combo) y ya con estos datos, alimentas al <select> con los resultados obtenidos:

Código Javascript:
Ver original
  1. var lista = document.getElementById("id_select"), //El combo de opciones
  2.     ajax = function(){
  3.         var xhr = new XMLHttpRequest() || new ActiveXObject("Microsoft.XMLHTTP");
  4.         xhr.open("GET", "personas.php", true);
  5.         xhr.onreadystatechange = function(){
  6.             if (xhr.readyState == 4 && xhr.status == 200){
  7.                 var nombres = JSON.parse(xhr.responseText),
  8.                     total = nombres.length;
  9.                 for (var i = 0; i < total; i++){
  10.                     var opcion = document.createElement("option");
  11.                     opcion.value = nombres[i].nombre;
  12.                     opcion.innerHTML = nombres[i].nombre;
  13.                     lista.appendChild(opcion);
  14.                 }
  15.             }
  16.         };
  17.         xhr.send(null);
  18.     };

Creo al objeto XMLHttpRequest (para hacer la petición asíncrona), realizo la petición y recibo una respuesta a la cual decodifico para obtener un array al cual pueda recorrer y así tomar los valores que contiene para añadirlos al combo. Con lo anterior, ya tienes listo al combo y sus opciones traídas desde la BD. Ahora, nos haría falta un botón que, al pulsarlo, tomará al valor seleccionado en el combo y lo listará, además de un elemento en el cual se listarán los nombres seleccionados.

Código HTML:
Ver original
  1. Listado: <select id = "lista"></select>
  2. <button onclick = "agregar()">Agregar</button>
  3. Seleccionados: <p id = "seleccionados"></p>

Como verás, al pulsar el botón, se ejecutará la función agregar(), la cual tendrá una estructura como esta:

Código Javascript:
Ver original
  1. var agregar = function(){
  2.     var seleccionados = document.getElementById("seleccionados");
  3.     seleccionados.innerHTML += "<br />" + lista.value;
  4.     lista.removeChild(lista[lista.selectedIndex]);
  5. };

De esta forma, vamos mostrando los nombres seleccionados en el párrafo 'seleccionados' y, a la vez, retiramos el mismo nombre del combo. Todo junto quedaría así:

Código Javascript:
Ver original
  1. var lista = document.getElementById("lista"), //El combo de opciones
  2.     seleccionados = document.getElementById("seleccionados"), //El párrafo
  3.     agregar = function(){
  4.         seleccionados.innerHTML += "<br />" + lista.value;
  5.         lista.removeChild(lista[lista.selectedIndex]);
  6.     },
  7.     ajax = function(){
  8.         var xhr = new XMLHttpRequest() || new ActiveXObject("Microsoft.XMLHTTP");
  9.         xhr.open("GET", "personas.php", true);
  10.         xhr.onreadystatechange = function(){
  11.             if (xhr.readyState == 4 && xhr.status == 200){
  12.                 var nombres = JSON.parse(xhr.responseText),
  13.                     total = nombres.length;
  14.                 for (var i = 0; i < total; i++){
  15.                     var opcion = document.createElement("option");
  16.                     opcion.value = nombres[i].nombre;
  17.                     opcion.innerHTML = nombres[i].nombre;
  18.                     lista.appendChild(opcion);
  19.                 }
  20.             }
  21.         };
  22.         xhr.send(null);
  23.     };

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand

Última edición por Alexis88; 22/10/2014 a las 10:19 Razón: Corrección