Foros del Web » Programando para Internet » Javascript »

Select que agrega datos a varios campos de texto

Estas en el tema de Select que agrega datos a varios campos de texto en el foro de Javascript en Foros del Web. buenas noches, tengo el siguiente codigo: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código Javascript : Ver original function getCombo2 ( id_combo1 ) { //variable que espera la funcion   ...
  #1 (permalink)  
Antiguo 16/01/2015, 14:45
 
Fecha de Ingreso: abril-2011
Mensajes: 171
Antigüedad: 13 años
Puntos: 1
Select que agrega datos a varios campos de texto

buenas noches, tengo el siguiente codigo:

Código Javascript:
Ver original
  1. function getCombo2(id_combo1){ //variable que espera la funcion
  2.     var xmlhttp;
  3.     if (window.XMLHttpRequest){// codigo for IE7+, Firefox, Chrome, Opera, Safari
  4.         xmlhttp=new XMLHttpRequest();
  5.     }else{// codigo for IE6, IE5
  6.         xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  7.     }
  8.     //funcion que se llama cada vez que cambia la propiedad readyState
  9.     xmlhttp.onreadystatechange=function(){
  10.         //readyState 4: peticion finalizada y respuesta lista
  11.         //status 200: OK
  12.         if (xmlhttp.readyState===4 && xmlhttp.status===200){
  13.             //Pasar la respuesta html a div_combo2
  14.             document.getElementById("div_combo").innerHTML=xmlhttp.responseText;
  15.             document.getElementById("div_combo2").innerHTML=xmlhttp.responseText;
  16.             document.getElementById("div_combo3").innerHTML=xmlhttp.responseText;
  17.         }
  18.     };
  19.     /* open(metodo, url, asincronico)
  20.     * metodo: post o get
  21.     * url: localizacion del archivo en el servidor
  22.     * asincronico: comunicacion asincronica true o false.*/
  23.     xmlhttp.open("POST","get_combo2.php",true);//establece el header para la respuesta
  24.     xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");//enviamos las variables al archivo get_combo2.php
  25.     xmlhttp.send("id_combo1=" + id_combo1);        
  26. }

en conjunto con:

Código PHP:
Ver original
  1. <?php
  2. include_once("localhost//datos_base_de_datos.php");
  3. $conectar=mysqli_connect("$hosting","$usuario","$pass");
  4. mysqli_select_db($conectar,"$base");
  5. //recibimos la variable enviada desde ajax
  6. $id_combo1=$_POST["id_combo1"];
  7. //hacemos el query para obtener los datos segun la variable obtenida
  8. $sql="select chofer,patente2,tara from tickets where patente='$id_combo1'";
  9. //ejecutamos el query
  10. $query= mysqli_query($conectar, $sql);
  11. $a=mysqli_fetch_row($query);
  12. mysqli_close($conectar);
  13. ?>
  14. <!--Este es lo verdadero que mostramos con los datos cargados-->
  15. <input type="text" name="chofer" value="<?php echo"$a[0]"; ?>"/>
  16. <input type="text" name="tara" value="<?php echo"$a[2]"; ?>"/>
  17. <input type="text" name="chapa2" value="<?php echo"$a[1]"; ?>"/>

funciona de la siguiente manera, al cambiar el valor de un select, se ejecuta la funcion, esta envia el valor del select y con ese valor ejecuto un consulta, y los resultados de la misma las muestro en un campo de texto, el problema es que son 3 campos que deben ir en 3 lugares distintos dentro de una tabla, pero en cada uno de esos lugares en donde debe ir uno, me aparecen los 3, osea que tengo 9 campos de texto, cada uno se repite 2 veces, como puedo solucionar mi problema?? Tengo muy muy poco conocimiento de javascritp! por favor ayudenme! gracias
  #2 (permalink)  
Antiguo 16/01/2015, 15:55
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Select que agrega datos a varios campos de texto

Desde el archivo PHP, podrías enviar un array asociativo con los nombres y valores respectivos, luego, solo te queda crear las cajas de texto en la función que ejecuta la petición asíncrona (Ajax) y les asignas dichos valores.

Código PHP:
Ver original
  1. echo json_encode(array('chofer' => $a[0], 'tara' => $a[2], 'chapa2' => $a[1]));

Código Javascript:
Ver original
  1. var datos = JSON.parse(xmlhttp.responseText),
  2.     i = 1, caja;
  3.  
  4. for (var prop in datos){
  5.     caja = document.createElement("input");
  6.     caja.type = "text";
  7.     caja.name = prop;
  8.     caja.value = datos[prop];
  9.     document.getElementById("div_combo" + i).innerHTML = caja;
  10.     i++;
  11. }

Lo único que tendrías que modificar —aparte de esto— es el id del primero 'div_combo', al cual le añadirías un '1' al final del mismo, así como hiciste con 'div_combo2'. Puedes mantenerlo como lo tienes, pero tendrías que crear cada caja de texto y añadir los valores manualmente, mientras que de esta manera, el proceso sería automático.

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
  #3 (permalink)  
Antiguo 16/01/2015, 16:52
 
Fecha de Ingreso: abril-2011
Mensajes: 171
Antigüedad: 13 años
Puntos: 1
Respuesta: Select que agrega datos a varios campos de texto

El archivo PHP me quedó asi:
Código PHP:
Ver original
  1. <?php
  2. include_once("localhost//datos_base_de_datos.php");
  3. $conectar=mysqli_connect("$hosting","$usuario","$pass");
  4. mysqli_select_db($conectar,"$base");
  5. //recibimos la variable enviada desde ajax
  6. $id_combo1=$_POST["id_combo1"];
  7. //hacemos el query para obtener los datos segun la variable obtenida
  8. $sql="select chofer,patente2,tara from tickets where patente='$id_combo1'";
  9. //ejecutamos el query
  10. $query= mysqli_query($conectar, $sql);
  11. $a=mysqli_fetch_row($query);
  12. mysqli_close($conectar);
  13. echo json_encode(array('chofer' => $a[0], 'tara' => $a[2], 'chapa2' => $a[1]));
  14. ?>
  15. <script language="javascript" type="text/javascript">
  16. var datos = JSON.parse(xmlhttp.responseText),
  17.     i = 1, caja;
  18.  
  19. for (var prop in datos){
  20.     caja = document.createElement("input");
  21.     caja.type = "text";
  22.     caja.name = prop;
  23.     caja.value = datos[prop];
  24.     document.getElementById("div_combo" + i).innerHTML = caja;
  25.     i++;
  26. }
  27. </script>

al elejir el dato del select, ahora si aparecen en los lugares en donde deben ir, pero lo que me aparece es el echo del array completo en cada uno, que estaría faltando??
  #4 (permalink)  
Antiguo 16/01/2015, 21:59
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Select que agrega datos a varios campos de texto

El código JavaScript debiste de colocarlo en el archivo en el cual haces la petición asíncrona (Ajax), no en el archivo PHP que recibe la petición. Corrige eso.

P.D.: Esas líneas de código JavaScript que te puse, deben de ir en lugar de estas que venías usando:

Código Javascript:
Ver original
  1. document.getElementById("div_combo").innerHTML=xmlhttp.responseText;
  2. document.getElementById("div_combo2").innerHTML=xmlhttp.responseText;
  3. document.getElementById("div_combo3").innerHTML=xmlhttp.responseText;

No olvides cambiar lo que te dije sobre el id del primer 'div_combo'.

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; 16/01/2015 a las 22:05 Razón: Post-data
  #5 (permalink)  
Antiguo 17/01/2015, 10:14
 
Fecha de Ingreso: abril-2011
Mensajes: 171
Antigüedad: 13 años
Puntos: 1
Respuesta: Select que agrega datos a varios campos de texto

si, el id del primer div tiene el nombre de div_combo1

con respecto a lo demas, queda asi:
Código Javascript:
Ver original
  1. //FUNCION AJAX PARA LLAMAR LOS DATOS DEL SEGUNDO COMBO
  2. function getCombo2(id_combo1){ //variable que espera la funcion
  3.     var xmlhttp;
  4.     if (window.XMLHttpRequest){// codigo for IE7+, Firefox, Chrome, Opera, Safari
  5.         xmlhttp=new XMLHttpRequest();
  6.     }else{// codigo for IE6, IE5
  7.         xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  8.     }
  9.     //funcion que se llama cada vez que cambia la propiedad readyState
  10.     xmlhttp.onreadystatechange=function(){
  11.         //readyState 4: peticion finalizada y respuesta lista
  12.         //status 200: OK
  13.         if (xmlhttp.readyState===4 && xmlhttp.status===200){
  14.             //Pasar la respuesta html a div_combo2
  15.             var datos = JSON.parse(xmlhttp.responseText), i = 1, caja;
  16.  
  17.             for (var prop in datos){
  18.                 caja = document.createElement("input");
  19.                 caja.type = "text";
  20.                 caja.name = prop;
  21.                 caja.value = datos[prop];
  22.                 document.getElementById("div_combo" + i).innerHTML = caja;
  23.                 i++;
  24.             }
  25.             /*document.getElementById("div_combo1").innerHTML=xmlhttp.responseText;
  26.             document.getElementById("div_combo2").innerHTML=xmlhttp.responseText;
  27.             document.getElementById("div_combo3").innerHTML=xmlhttp.responseText;*/
  28.         }
  29.     };
  30.     /* open(metodo, url, asincronico)
  31.     * metodo: post o get
  32.     * url: localizacion del archivo en el servidor
  33.     * asincronico: comunicacion asincronica true o false.*/
  34.     xmlhttp.open("POST","get_combo2.php",true);//establece el header para la respuesta
  35.     xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");//enviamos las variables al archivo get_combo2.php
  36.     xmlhttp.send("id_combo1=" + id_combo1);
  37. }

y el archivo php get_combo2 quedo asi:
Código PHP:
Ver original
  1. $conectar=mysqli_connect("$hosting","$usuario","$pass");
  2. mysqli_select_db($conectar,"$base");
  3. //recibimos la variable enviada desde ajax
  4. $id_combo1=$_POST["id_combo1"];
  5. //hacemos el query para obtener los datos segun la variable obtenida
  6. $sql="select chofer,patente2,tara from tickets where patente='$id_combo1'";
  7. //ejecutamos el query
  8. $query= mysqli_query($conectar, $sql);
  9. $a=mysqli_fetch_row($query);
  10. mysqli_close($conectar);
  11. echo json_encode(array('chofer' => $a[0], 'tara' => $a[2], 'chapa2' => $a[1]));

hay un par de cositas que no termino de entender, y si pudieras explcarmelas seria genial!

1) JSON.parse(xmlhttp.responseText) -> en la definicion de las variables
2) var prop in datos -> en el for
3) caja.name = prop; -> el nombre del textbox es "prop"??
4) caja.value = datos[prop]; -> que valor tomaria el texbox??

Muchas gracias Alexis88!!
  #6 (permalink)  
Antiguo 17/01/2015, 10:32
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Select que agrega datos a varios campos de texto

Cita:
Iniciado por axelb Ver Mensaje
Hay un par de cositas que no termino de entender, y si pudieras explcarmelas seria genial!

1) JSON.parse(xmlhttp.responseText) -> en la definicion de las variables
2) var prop in datos -> en el for
3) caja.name = prop; -> el nombre del textbox es "prop"??
4) caja.value = datos[prop]; -> que valor tomaria el texbox??
Con gusto:
  1. JSON.parse(xmlhttp.responseText): Si te fijas en el archivo PHP, estoy devolviendo un array, pero como no puedo enviarlo directamente, le doy el formato JSON con lo cual el envío no tendrá problemas. Como lo que recibo es texto plano (por responseText), aplico el método JSON.parse para recuperar el objeto JSON que generé en el archivo PHP.
  2. var prop in datos: Luego del punto anterior, lo que me queda es un objeto JSON, por lo que puedo recorrerlo con cualquier bucle (while, for). En JavaScript, hay un bucle llamado for...in, con el cual puedo recorrer arrays y objetos, en donde la primera variable representará a las propiedades del objeto y la segunda, al objeto.
  3. caja.name = prop: En el array que formo en el archivo PHP, los índices son los nombres que originalmente habías asignado a tus cajas de texto y en el objeto JSON formado, son las propiedades, por lo tanto, para asignar los mismos nombres a las cajas de texto que genero en el código JavaScript, tengo que asignarles los valores de las propiedades del objeto JSON.
  4. caja.value = datos[prop]: Lo mismo que en el caso anterior, solo que en lugar de los índices del array (que son las propiedades en el objeto JSON), le asigno los valores que corresponden a cada uno de ellos.

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
  #7 (permalink)  
Antiguo 17/01/2015, 14:41
 
Fecha de Ingreso: abril-2011
Mensajes: 171
Antigüedad: 13 años
Puntos: 1
Respuesta: Select que agrega datos a varios campos de texto

haber si entendi, entonces con este array:

array('chofer' => $a[0], 'tara' => $a[2], 'chapa2' => $a[1])

prop= chofer, tara y chapa2
datos[prop]= $a[0],$a[2],$a[1]

para cada uno de los casos, no??

con respecto al funcionamiento de select, así como te lo deje en el mensaje anterior no me funciona, me tira el siguiente error: Uncaught SyntaxError: Unexpected token <
y no se que es lo que esta mal! :/
  #8 (permalink)  
Antiguo 17/01/2015, 14:50
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Select que agrega datos a varios campos de texto

Fíjate en el número de línea en donde te marca el error y corrígelo.

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
  #9 (permalink)  
Antiguo 17/01/2015, 14:52
 
Fecha de Ingreso: abril-2011
Mensajes: 171
Antigüedad: 13 años
Puntos: 1
Respuesta: Select que agrega datos a varios campos de texto

es lo que hice, me dice linea 2, pero no encuentro el error en esa linea ni en ninguna otra...
  #10 (permalink)  
Antiguo 17/01/2015, 14:59
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Select que agrega datos a varios campos de texto

El mensaje es claro, te indica que se trata de un error de sintaxis, de manera que te va a tocar revisar con calma el código y ver en dónde has cometido el error.

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
  #11 (permalink)  
Antiguo 17/01/2015, 15:16
 
Fecha de Ingreso: abril-2011
Mensajes: 171
Antigüedad: 13 años
Puntos: 1
Respuesta: Select que agrega datos a varios campos de texto

He encontrado el error, era una linda html comentada, una vez borrada dicha linea, al seleccionar el valor del select, en los lugares en donde deberia ir la info del array, me muestra "[object HTMLInputElement]"

que puede andar mal??
  #12 (permalink)  
Antiguo 17/01/2015, 16:11
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Select que agrega datos a varios campos de texto

Ya me di cuenta, fue un error de mi parte.

No debes de asignar la caja de texto generada de esa manera, tienes que adherirla al elemento con el método appendChild.

Código Javascript:
Ver original
  1. document.getElementById("div_combo" + i).appendChild(caja);

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
  #13 (permalink)  
Antiguo 17/01/2015, 18:05
 
Fecha de Ingreso: abril-2011
Mensajes: 171
Antigüedad: 13 años
Puntos: 1
Respuesta: Select que agrega datos a varios campos de texto

casualmente estaba leyendo acerca del appendChild, ya que googleando había encontrado que podría ser la solución, aunque como casi no tengo conocimientos de js, he probado de muchas formas distintas de asignar el texbox pero con ninguna pude lograrlo!

Le agregue la siguiente linea al código:

document.getElementById(prop).style.display="none" ;

para que los texbox que aparecen por defecto desaparezcan y funciona todo bien, el único inconveniente ocurre al seleccionar un segundo valor del select, sucede que deja el primero y agrega nuevamente los textbox con los datos de la segunda selección del select, se entiende?? como se podrá arreglar esto??
  #14 (permalink)  
Antiguo 17/01/2015, 18:42
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Select que agrega datos a varios campos de texto

Ahí sí puedes usar la propiedad innerHTML pero para quitar el contenido. Quedaría así:

Código Javascript:
Ver original
  1. var datos = JSON.parse(xmlhttp.responseText),
  2.     i = 1, caja, div;
  3.  
  4. for (var prop in datos){
  5.     caja = document.createElement("input");
  6.     div = document.getElementById("div_combo" + i);
  7.     caja.type = "text";
  8.     caja.name = prop;
  9.     caja.value = datos[prop];
  10.     div.innerHTML = null; //Retiro el contenido
  11.     div.appendChild(caja); //Añado la caja de texto
  12.     i++;
  13. }

Ya sabes, esto va en lugar de esas tres líneas sobre las que te comenté antes.

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
  #15 (permalink)  
Antiguo 17/01/2015, 19:15
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Respuesta: Select que agrega datos a varios campos de texto

Hola:

Cita:
Iniciado por Alexis88 Ver Mensaje
div.innerHTML = null; //Retiro el contenido
No entiendo porqué no asignas la cadena vacía...

Ademas, con el sistema de nodos también sería sencillo (aunque mediante un bucle):

while (div.hasChildNodes()) div.removeChild(div.firstChild);

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #16 (permalink)  
Antiguo 17/01/2015, 20:01
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Select que agrega datos a varios campos de texto

Cita:
Iniciado por caricatos Ver Mensaje
No entiendo porqué no asignas la cadena vacía...
Porque es uno de los valores primitivos que se pueden usar en el lenguaje para representar la ausencia de cualquier valor, tal y como se indica en la especificación del lenguaje. No veo nada malo en su uso.

Por otro lado, esto:

Cita:
Iniciado por caricatos Ver Mensaje
while (div.hasChildNodes()) div.removeChild(div.firstChild);
Si bien puede funcionar, no habría necesidad de aplicarlo en este caso; ten en cuenta que ya se está utilizando otro bucle que itera sobre un objeto, por lo que es solo cuestión de aprovechar dichas iteraciones para recorrer el conjunto de cajas de texto e ir limpiándolas.

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
  #17 (permalink)  
Antiguo 17/01/2015, 21:34
 
Fecha de Ingreso: abril-2011
Mensajes: 171
Antigüedad: 13 años
Puntos: 1
Respuesta: Select que agrega datos a varios campos de texto

Muchas gracias!! Ahora todavia me queda hacer algo similar a esto, en base a la seleccion de un dato del select, debo crear 2 select segun el dato que reciba, será muy complicado eso??
  #18 (permalink)  
Antiguo 17/01/2015, 21:45
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Select que agrega datos a varios campos de texto

Así como creo cajas de texto de manera dinámica, también puedes crear otros elementos, como los <select>.

Código Javascript:
Ver original
  1. document.createElement("select");

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
  #19 (permalink)  
Antiguo 17/01/2015, 22:34
 
Fecha de Ingreso: abril-2011
Mensajes: 171
Antigüedad: 13 años
Puntos: 1
Respuesta: Select que agrega datos a varios campos de texto

Lo intentare en unos días!! Imagino que para pasarle los valores tendré que crear un array de la misma manera que en este caso, con la diferencia de que será dinámico también!

Muchas gracias por tu ayuda Alexis88!! Has dedicado mucho tiempo en ayudarme!! Saludos

Etiquetas: ajax, campos, funcion, html, input, php, select, tabla, valor
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 17:15.