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

llenado de un combo

Estas en el tema de llenado de un combo en el foro de Frameworks JS en Foros del Web. Bueno compas, estoy haciendo una caballada xD bueno necesito hacer que mi aplicacion, al ejecutarse un evento en html me genere un combo que se ...
  #1 (permalink)  
Antiguo 16/04/2009, 10:58
Avatar de lobo_php  
Fecha de Ingreso: noviembre-2007
Ubicación: Cali-Colombia
Mensajes: 1.869
Antigüedad: 17 años, 1 mes
Puntos: 75
Exclamación llenado de un combo

Bueno compas, estoy haciendo una caballada xD bueno necesito hacer que mi aplicacion, al ejecutarse un evento en html me genere un combo que se consulte en una base de datos esa info.

la consulta la hace en php entonces:

Código AJAX:
Ver original
  1. function ponerCnv(destino)//destino se llama el select
  2. {
  3. var ajax=otroAjax();
  4.         ajax.open("GET", "ajax/func_add_user.php", true);
  5.         ajax.onreadystatechange=function(){
  6.             if (ajax.readyState==4){
  7.                 //document.getElementById(destino).value=ajax.responseText;
  8.                 var combo2 = document.getElementById('convenio');
  9.                 combo2.options[0] = ajax.responseText;//aqui es que no se como hacer
  10.             }
  11.         }
  12.         ajax.send(null);
  13. }

y en php la consulta es:

Código PHP:
Ver original
  1. $consulta_convenio="SELECT c.PCNITC, c.PCNOMC FROM SGDATOS.PCCON05F as c";
  2. $rsc=odbc_exec($conectar,$consulta_convenio);
  3. $c=0;
  4. while (odbc_fetch_row($rsc)){
  5.     $nom_convenio[$c]=trim(odbc_result($rsc,'PCNOMC'));
  6.     $id_cnv[$c]=trim(odbc_result($rsc,'PCNITC'));
  7.     //echo $nom_convenio[$c];
  8.     //echo $id_cnv[$c];
  9.     echo "<option value='$id_cnv[$c]'>$nom_convenio[$c]</option>";
  10.     $c++;
  11. }


algo me falta o estoy haciendo mal???

gracias por la ayuda
__________________
Cabuntu.org - Difundiendo Software Libre en Cali, Colombia
Usuario Linux # 483175
  #2 (permalink)  
Antiguo 16/04/2009, 11:04
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años, 8 meses
Puntos: 839
Respuesta: llenado de un combo

Por lo que veo, desde el servidor estás devolviendo las opciones con etiquetas HTML y todo. Por lo que habría que usar innerHTML para ingresarlos a la lista desplegable:
Código javascript:
Ver original
  1. combo2.innerHTML = ajax.responseText;
P.S.: ¿No envías ningún parámetro de filtrado al servidor en la petición? En ese caso tal vez no sea necesario usar AJAX , ya que podrías imprimir directamente las opciones al momento de cargar la página.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #3 (permalink)  
Antiguo 16/04/2009, 12:26
Avatar de lobo_php  
Fecha de Ingreso: noviembre-2007
Ubicación: Cali-Colombia
Mensajes: 1.869
Antigüedad: 17 años, 1 mes
Puntos: 75
WOW! men que sabio eres, me funciono a la maravilla, la cosa que uso en ajax es por que no escribi todo lo que hacia, resulta que es mas o menos un select dependiente. cuando en otro combo que tengo se escoje x opcion se debe cargar este combo sin ningun filtro, solo todos los datos de una tabla.

emmm una cosita,,, no me funciona en IE!!! que hago?!
__________________
Cabuntu.org - Difundiendo Software Libre en Cali, Colombia
Usuario Linux # 483175

Última edición por GatorV; 16/04/2009 a las 18:30
  #4 (permalink)  
Antiguo 16/04/2009, 14:02
Avatar de eall  
Fecha de Ingreso: noviembre-2008
Ubicación: Concepcion
Mensajes: 127
Antigüedad: 16 años, 1 mes
Puntos: 8
Respuesta: llenado de un combo

lo mejor es generar el combo completo y lo asignas a un div que contenga el combo, asi en un principio tienes un combo vacío y luego, al seleccionar el otro combo, llenas el div con innerHTML con el combo generado.

a mi me funciona, aunque uso jQuery o xajax, pero seguro es lo mismo.

espero te ayude.
  #5 (permalink)  
Antiguo 16/04/2009, 14:21
Avatar de lobo_php  
Fecha de Ingreso: noviembre-2007
Ubicación: Cali-Colombia
Mensajes: 1.869
Antigüedad: 17 años, 1 mes
Puntos: 75
Respuesta: llenado de un combo

a mi ya me funciono como lo tengo y como me dijo david pero no me funciona en la CHUCHA DEL IE!! :@
__________________
Cabuntu.org - Difundiendo Software Libre en Cali, Colombia
Usuario Linux # 483175
  #6 (permalink)  
Antiguo 16/04/2009, 14:28
 
Fecha de Ingreso: enero-2009
Mensajes: 455
Antigüedad: 15 años, 10 meses
Puntos: 11
Respuesta: llenado de un combo

si no mal recuerdo, no te funciona porque debes de poner tu combo (select) dentro de un div

algo asi como

<div>
<select>tu ajax response aparecería aqui</select>
</div>

e igual lo metes con el innerHTML

saludos
  #7 (permalink)  
Antiguo 16/04/2009, 14:29
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años, 8 meses
Puntos: 839
Respuesta: llenado de un combo

La opción que te comenta eall es válida.

Otra forma también podría ser cambiar el formato en que devuelves el resultado. Devolver como XML (que es más fácil de procesar) o como texto (pero sin los <option>, más bien el texto y el value separados por un carácter, que puedes procesar usando split)
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #8 (permalink)  
Antiguo 16/04/2009, 14:40
Avatar de lobo_php  
Fecha de Ingreso: noviembre-2007
Ubicación: Cali-Colombia
Mensajes: 1.869
Antigüedad: 17 años, 1 mes
Puntos: 75
no entendi muy bien esa opcion me podrias ayudar? como q xml? de que forma?

en el script de php puedo definir variables con los valores que necesite, en el javascript con ajax como puedo tomar el valor de esas variables?
__________________
Cabuntu.org - Difundiendo Software Libre en Cali, Colombia
Usuario Linux # 483175

Última edición por GatorV; 17/04/2009 a las 09:19
  #9 (permalink)  
Antiguo 17/04/2009, 09:00
 
Fecha de Ingreso: enero-2009
Mensajes: 455
Antigüedad: 15 años, 10 meses
Puntos: 11
Respuesta: llenado de un combo

como yo lo he hecho es que tu .php te devuelta algo asi como

<option> a </option>
<option> b </option>
etc y cuando uses tu javascript con el ajax, el ajax request te regresara esa salida de tu .php, una ves que la tengas, la agregas con un innerHTML a tu combo, si no te permite agregarla al combo es por lo que te comentaba en mi post anterior

saludos
  #10 (permalink)  
Antiguo 17/04/2009, 09:30
Avatar de eall  
Fecha de Ingreso: noviembre-2008
Ubicación: Concepcion
Mensajes: 127
Antigüedad: 16 años, 1 mes
Puntos: 8
De acuerdo Respuesta: llenado de un combo

lo que yo te decía es que lo hicieras de esta forma:


Código javascript:
Ver original
  1. function ponerCnv(destino)//destino se llama el select
  2.        {
  3.                var ajax=otroAjax();
  4.                ajax.open("GET", "ajax/func_add_user.php", true);
  5.                ajax.onreadystatechange=function(){
  6.                   if (ajax.readyState==4){
  7.                       //document.getElementById(destino).value=ajax.responseText;
  8.                       var combo2 = document.getElementById('divConvenio'); //Este div contiene el select completo
  9.                       combo2.options[0] = ajax.responseText;//aqui es que no se como hacer
  10.                   }
  11.               }
  12.               ajax.send(null);
  13.       }

Código php:
Ver original
  1. $consulta_convenio="SELECT c.PCNITC, c.PCNOMC FROM SGDATOS.PCCON05F as c";
  2. $rsc=odbc_exec($conectar,$consulta_convenio);
  3. $c=0;
  4.  
  5. $str = "<select id='convenio' name='convenio'>";
  6. while (odbc_fetch_row($rsc)){
  7.     $nom_convenio[$c]=trim(odbc_result($rsc,'PCNOMC'));
  8.     $id_cnv[$c]=trim(odbc_result($rsc,'PCNITC'));
  9.     //echo $nom_convenio[$c];
  10.     //echo $id_cnv[$c];
  11.     $str .= "<option value='$id_cnv[$c]'>$nom_convenio[$c]</option>";
  12.     $c++;
  13. }
  14. $str .= "</select>";
  15.  
  16. echo $str;

Código html:
Ver original
  1. <div id="divConvenio"><select id="convenio"><option value="">Elija Convenio</option></select></div>

Creo que eso te podría ayudar.

Esop.
  #11 (permalink)  
Antiguo 17/04/2009, 09:48
Avatar de lobo_php  
Fecha de Ingreso: noviembre-2007
Ubicación: Cali-Colombia
Mensajes: 1.869
Antigüedad: 17 años, 1 mes
Puntos: 75
Respuesta: llenado de un combo

bueno como no entendi muy bien hice lo mas facil pero creo q mas largo xD

lo hice asi:
Código PHP:
Ver original
  1. $consulta_convenio="SELECT c.PCNITC, c.PCNOMC FROM SGDATOS.PCCON05F as c";
  2. $rsc=odbc_exec($conectar,$consulta_convenio);
  3. $c=0;
  4. $info="";
  5. while (odbc_fetch_row($rsc)){
  6.     $nom_convenio[$c]=trim(odbc_result($rsc,'PCNOMC'));
  7.     $id_cnv[$c]=trim(odbc_result($rsc,'PCNITC'));
  8.     //echo $nom_convenio[$c];
  9.     //echo $id_cnv[$c];
  10.     //echo "<option value='$id_cnv[$c]'>$nom_convenio[$c]</option>";
  11.     $info = $info.$id_cnv[$c].":".$nom_convenio[$c].";";
  12.     $c++;
  13. }
  14. echo $info;


eso en el .php y en el javascript me toco esto:
Código JAVASCRIPT:
Ver original
  1. if (ajax.readyState==4){
  2.                 //document.getElementById(destino).value=ajax.responseText;
  3.                 var combo2 = document.getElementById('convenio');
  4.                 var info_todo = ajax.responseText;
  5.                 var info_cu = info_todo.split(';');
  6.                 var vector = info_todo.split(';');
  7.                 var y=0;
  8.                 for(y=0;y<=vector.length-2;y++){
  9.                     var convenio = vector[y].split(':');
  10.                     var opcion = new Option(convenio['1'],convenio['0']);
  11.                     combo2.options[y] = opcion;
  12.                 }
  13.             }

y ahora me funciona tanto en Firefox como en IE



ahora tengo dos problemas:

el primero que es el mas sencillo (creo yo) para solucionar es que hago lo siguiente segun un evento:
Código JAVASCRIPT:
Ver original
  1. function habilitar_cencos(valor){
  2.     if(valor=="1"){
  3.         alert("remove readonly");
  4.         document.getElementById("cencos").removeAttribute('readonly');
  5.     }
  6.     if(valor=="0"){
  7.         document.getElementById("cencos").value = "";
  8.         document.getElementById("cencos").setAttribute('readonly', 'readonly');
  9.     }
  10.     //document.getElementById("cencos").setAttribute('readonly', valor);
  11. }

lo que hace este codigo es que depende del valor que tenga la variable 'valor' quita en un input text su parametro 'readonly' es decir, deja escribir o no deja escribir, lo bueno es q en firefox me funciona, lo malo es que en IE no me funciona xD


el otro punto es el siguiente:

Código javascript:
Ver original
  1. if(bandera=="0"){
  2.         //borramos de nuevo
  3.         var combo1 = document.getElementById('convenio');
  4.         var n = combo1.options.length;
  5.         var j=0;
  6.         for(j;j<=n;j++){
  7.             combo1.options[j]=null;
  8.         }
  9.     }

ahi quito todas las opciones del select, lo raro es q tanto en FF como en IE me las va quitando de a 2 o 3 cuando se repite el evento, no me las quita de una, en el for que va de 0 a 9 me carga hasta el 4, luego hasta el 2 luego hasta el 1 y luego si se desaparece todo.
__________________
Cabuntu.org - Difundiendo Software Libre en Cali, Colombia
Usuario Linux # 483175

Última edición por lobo_php; 17/04/2009 a las 10:03 Razón: me faltaron los otros errores
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 18:46.