Foros del Web » Programando para Internet » Javascript » Frameworks JS »

¿cuál es la mejor forma de hacerlo?

Estas en el tema de ¿cuál es la mejor forma de hacerlo? en el foro de Frameworks JS en Foros del Web. Hola! soy novatillo con el DOM y no sé cual es la mejor forma de hacer lo siguiente. Tengo dos selects, una para seleccionar provincias ...
  #1 (permalink)  
Antiguo 20/05/2008, 09:28
 
Fecha de Ingreso: marzo-2008
Mensajes: 80
Antigüedad: 16 años, 1 mes
Puntos: 0
¿cuál es la mejor forma de hacerlo?

Hola! soy novatillo con el DOM y no sé cual es la mejor forma de hacer lo siguiente.

Tengo dos selects, una para seleccionar provincias y la otra por las poblaciones. La gracia es que al seleccionar, por ejemplo, madrid, se actualiza dinamicamente la otra lista y se cargan las poblaciones de Madrid.

Lo que no sé hacer es actualizar la lista. El script php devuelve lo siguiente:

<option>poblacion1</option>
<option>poblacion2</option>
....

Como actualizo toda la lista con el DOM?

Lo más eficiente seria sustituir todas las opciones por lo que devuelve el php, o canviar todo el select entero. Lo que no es viable es sacarlas una a una y luego entrarlas una a una. Hay provincias que tienen centenares de poblaciones, y se trata de una funcionalidad de uso muy común en el site. Debe ser lo más eficiente possible.

por si teneis dudas podeís ver el proyecto aquí:
http://www.trabajillos.es/PHP/


Ideas?

Ivan
  #2 (permalink)  
Antiguo 21/05/2008, 06:40
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: ¿cuál es la mejor forma de hacerlo?

Un span donde esten las opciones y substituir su contenido....

<option></option>
<span id="opciones>
<option>poblacion2</option>
...
</span>

Pediste ideas no lo he probado....

Quim
  #3 (permalink)  
Antiguo 21/05/2008, 09:18
Avatar de mgusdl  
Fecha de Ingreso: abril-2007
Ubicación: Malaga, España
Mensajes: 190
Antigüedad: 17 años
Puntos: 5
Respuesta: ¿cuál es la mejor forma de hacerlo?

Antes de cargar las nuevas poblaciones al cambiar de provincia, elimina todos los hijos del select y antes del bucle que rellena el select incluye un elemento en blanco y punto pelota.

Lo del span dentro de un select es una barbaridad, para agrupar las opciones existe el optgroup, pero no es lo que necesitas.

para eliminar todos los elementos del select
Código:
document.forms.formulario.camposelect.options.length = 0;
o bien
Código:
document.getElementById('camposelect').options.length = 0;
  #4 (permalink)  
Antiguo 22/05/2008, 01:00
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: ¿cuál es la mejor forma de hacerlo?

Si me equivoque de una linea o dos ...

Voy a poner el ejemplo mas simple, la mejor forma para mi seria disponer de una base de datos con los municipios

TablaMunicipios
idMunicipio
idProvincia
NombreMunicipio

luego seria facil construir un archivo php capaz de devolver un select con los municipios de la provincia elegida.

Pero vamos a poner un ejemplo mas sencillo solo con html y js:

Archivo provmunis.html

Código HTML:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Documento sin t&iacute;tulo</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<script language="JavaScript" type="text/javascript" src="funcions.js"></script>
<body>
<table width="10%" border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td><select name="provincia" onChange="cambiaMunicipis('optionmuni',this)">
  <option value="00"></option>
  <option value="08">Barcelona</option>
  <option value="43">Tarragona</option>
</select></td>
  </tr>
  <tr>
    <td>
    <span id="optionmuni">
	<select name="municipio">
	<option value="00">Primero elija provincia</option>
    </select>
	</span>   
</td>
  </tr>
</table>
</body>
</html> 
Archivo funcions.js

Código HTML:
function clientSideInclude(id, url) {
  var req = false;
  // For Safari, Firefox, and other non-MS browsers
  if (window.XMLHttpRequest) {
    try {
      req = new XMLHttpRequest();
    } catch (e) {
      req = false;
    }
  } else if (window.ActiveXObject) {
    // For Internet Explorer on Windows
    try {
      req = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
      try {
        req = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (e) {
        req = false;
      }
    }
  }
 var element = document.getElementById(id);
 if (!element) {
  alert("Bad id " + id + 
   "passed to clientSideInclude." +
   "You need a div or span element " +
   "with this id in your page.");
  return;
 }
  if (req) {
    // Synchronous request, wait till we have it all
    req.open('GET', url, false);
    req.send(null);
    element.innerHTML = req.responseText;
  } else {
    element.innerHTML =
   "Sorry, your browser does not support " +
      "XMLHTTPRequest objects. This page requires " +
      "Internet Explorer 5 or better for Windows, " +
      "or Firefox for any system, or Safari. Other " +
      "compatible browsers may also exist.";
  }
}
 
function cambiaMunicipis(id,obj){
if (obj.value!="00"){
    url=obj.value + ".html";
	clientSideInclude(id, url);
}
}
Archivos de provincias, estos se podrian sustituir por un archivo php (jsp, asp o lo que sea) que pasandole el id de provincia nos devuelva el select con los municipios de dicha provincia, pero como no tengo php aqui, vamos a hacerlo com un html para cada provincia

Archivo 08.html (Barcelona)

Código HTML:
<select name="municipio">
	<option value="00"></option>
	<option value="01">Barcelona</option>
	<option value="02">Sabadell</option>
</select> 
Archivo 43.html (Tarragona)

Código HTML:
<select name="municipio">
	<option value="00"></option>
	<option value="01">Tarragona</option>
	<option value="02">Reus</option>
</select> 
Y ahi tenemos la barbaridad funcionando, solo he movido el inicio del <span > un par de lineas mas arriba, ya he dicho que me habia equivocado, lo siento.

Quim

Recordatorio
Cita:
Un span donde esten las opciones y substituir su contenido....

<option></option>
<span id="opciones>
<option>poblacion2</option>
...
</span>

Pediste ideas no lo he probado....

Quim
aaah!!!! punto pelota.

Última edición por quimfv; 22/05/2008 a las 01:02 Razón: Faltaba punto pelota.
  #5 (permalink)  
Antiguo 27/05/2008, 08:16
 
Fecha de Ingreso: marzo-2008
Mensajes: 80
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: ¿cuál es la mejor forma de hacerlo?

gracias quimfv, me ha servido tu solución!
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 16:01.