• Viernes 19 de Abril de 2024, 04:58

Autor Tema:  Necesito Poner Un Select Por Defecto En Ajax  (Leído 1610 veces)

jo21cu

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Necesito Poner Un Select Por Defecto En Ajax
« en: Domingo 3 de Diciembre de 2006, 01:40 »
0
bueno estoy haciendo 3 selects dependientes y no me aparecen los option por defecto <option value="0" selected="selected">seleccionar... </option>
del segundo y tercer select, yo quiero que se quede el option seleccionar por defecto y luego en el caso de que se carge algo que borre lo cargado
cada selects pregunta a la base da datos y devuelve los resultados en el select siguiente.

muchas gracias a todos de antemano.

codigo:

// Función que recoge los datos de las provincias del xml desde el script de PHP.
function dependiente(xml_provincias)
{
// Eliminamos todos los options del select de las provincias que pudieran ver.
selec=document.getElementById('s_provincias');
while (selec.hasChildNodes())
{
selec.removeChild(selec.firstChild);

}
// Calculamos el número de provincias a mostrar.
var numero=xml_provincias.getElementsByTagName("provin cia").length;;

for(i=0;i<numero;i++) // Por cada pueblo resultante
{

// Cogemos el nombre de las provincias
var nombre_provincia = xml_provincias.getElementsByTagName("provincia").childNodes[1].firstChild.nodeValue;

// Cogemos las provincias de nuevo porque no queremos otra cosa .
var id_provincia = xml_provincias.getElementsByTagName("provincia").childNodes[0].firstChild.nodeValue;
// Creamos un nodo texto, con el nombre de la provincia
var nodo_texto = document .createTextNode(nombre_provincia);
// Creamos un elemento option
var nuevo_option = document.createElement('option');
// Añadimos el texto al option creado.
nuevo_option.appendChild(nodo_texto);
// Añadimos el option creado al select con name "s_provincias"
selec.appendChild(nuevo_option);
// Añadimos el atributo value al option recien creado
nuevo_option.setAttribute("value",id_provincia);



<select name="provincias" size="1" class="navLink" id="s_provincias" onChange="llamada1();" style="width:178px" >
<option value="0" selected="selected">seleccionar... </option>
</select>
</div> </td>
</tr>
<tr>
<td valign="middle">Seleccione la población </td>
<td valign="middle">:</td>
<td valign="middle"><select name="pueblos" size="1" class="navLink" id="s_pueblo" style="width:178px">
<option value="0" selected="selected">seleccionar... </option>
<option value="1">Todas las poblaciones</option>
</select></td>

Juano

  • Nuevo Miembro
  • *
  • Mensajes: 15
    • Ver Perfil
Re: Necesito Poner Un Select Por Defecto En Ajax
« Respuesta #1 en: Lunes 11 de Diciembre de 2006, 23:29 »
0
Hola.
Hace poco hice algo similar, donde tenía 3 comboboxes dependientes.
El 1ro al seleccionar cambiaba lo del segundo, y el segundo lo del tercero.
En mi caso no hay opcion por defecto, mas bien hice que cargara las opciones de la primera que apareciera en el select.
Pero para solucionarlo es similar, te escribo como le hice.

Primer select:
Código: Text
  1.  
  2. &#60;select name=&#34;sMarca&#34; class=&#34;formas&#34; id=&#34;sMarca&#34; onchange=&#34;cambianios(this.selectedIndex,this.id);switch_select(this.value,'sProducto');&#34;&#62;&#60;/select&#62;
  3.  
  4.  
..el segundo parámetro es el nombre del select que depende de lo que se eliga en este.
2do select
Código: Text
  1.  
  2. &#60;select name=&#34;sProducto&#34; class=&#34;formas&#34; id=&#34;sProducto&#34; onchange=&#34;switch_select(this.value,'sModelo');&#34;&#62;&#60;/select&#62;
  3.  
  4.  
3er select..
Código: Text
  1.  
  2. &#60;select name=&#34;sModelo&#34; class=&#34;formas&#34; id=&#34;sModelo&#34;&#62;&#60;/select&#62;
  3.  
  4.  

Funcion switch_select...
Código: Text
  1.  
  2. function switch_select(id,selec)
  3. {
  4.   tiporesp=0;
  5.   selectid=selec;
  6.   url=&#34;server.php?id=&#34;+String(id);
  7.   origenajax(url,false);
  8.   if(selectid==&#34;sProducto&#34;)
  9.   {
  10.     var sbox=document.getElementById(&#34;sProducto&#34;);
  11.     switch_select(sbox.value,&#34;sModelo&#34;);
  12.   }
  13. }
  14.  
  15.  
La variable tiporesp es una global del javascript, que dice que se va a hacer con la respuesta del servidor.
selectid tambien es global, que se usa en la funcion procesarespuesta.
que es el select que se llenara con lo que responda el servidor.

Código: Text
  1.  
  2. function origenajax(url,synch)
  3. {
  4.   XMLHttp=null;
  5.   try
  6.   {
  7.     XMLHttp=new ActiveXObject(&#34;Msxml2.XMLHTTP&#34;);
  8.   }
  9.   catch(e)
  10.   {
  11.     try
  12.     {
  13.       XMLHttp=new ActiveXObject(&#34;Microsoft.XMLHTTP&#34;);
  14.     }
  15.     catch(e)
  16.     {
  17.       XMLHttp=new XMLHttpRequest();
  18.     }
  19.   }
  20.   XMLHttp.onreadystatechange=stateChanged;
  21.   XMLHttp.open(&#34;GET&#34;,url,synch);
  22.   XMLHttp.send(null);
  23. }
  24. function stateChanged()
  25. {
  26.   if(XMLHttp.readyState==4||XMLHttp.readyState==&#34;complete&#34;)
  27.   {
  28.     var respuesta=XMLHttp.responseText;
  29.     procesarespuesta(respuesta);
  30.   }
  31. }
  32. function procesarespuesta(respuesta)
  33. {
  34.   if(tiporesp==0)//PARA LLENAR SELECTS
  35.   {
  36.     var marca=document.getElementById(selectid);
  37.     marca.length=0;
  38.     var arr1=respuesta.split(&#34;|&#34;);
  39.     var arrlen=arr1.length-1;
  40.     for(i=0;i&#60;arrlen;i++)
  41.     {
  42.       var arr2=arr1[i].split(&#34;:&#34;);
  43.       marca.options[i]=new Option(arr2[1],arr2[0]);
  44.     }
  45.   }
  46. }
  47.  
  48.  
El servidor me da respuesta con el formato Elemento:value|Elemento:value en vez de ser xml, y para que en este caso se llenen correctamente los selects, la petición la hago síncrona.
Aqui si le quieres poner un valor por default, en el indice 0 del arreglo de opciones es cuando le pones tu opcion por default.