Foros del Web » Programando para Internet » Jquery »

Autocomplementar con Jquery

Estas en el tema de Autocomplementar con Jquery en el foro de Jquery en Foros del Web. Alguien me puede ayudar necesito crear un textbox que al escribir me valla sugiriendo nombre, según los resultados de una consulta realizada con ajax, esto ...
  #1 (permalink)  
Antiguo 18/11/2011, 07:18
 
Fecha de Ingreso: noviembre-2011
Mensajes: 20
Antigüedad: 13 años, 1 mes
Puntos: 0
Autocomplementar con Jquery

Alguien me puede ayudar necesito crear un textbox que al escribir me valla sugiriendo nombre, según los resultados de una consulta realizada con ajax, esto utilizando jquery ui.
  #2 (permalink)  
Antiguo 18/11/2011, 07:34
Avatar de linuxzero  
Fecha de Ingreso: noviembre-2011
Ubicación: Argentina
Mensajes: 778
Antigüedad: 13 años, 1 mes
Puntos: 160
Respuesta: Autocomplementar con Jquery

Con esta documentacion te debería alcanzar y hasta sobrar, no es muy dificil:

http://jqueryui.com/demos/autocomplete/

Si se te complica entenderlo avisame ;)

Saludos!
__________________
Si todo fuera tan sencillo como un symfony cc la vida seria más fácil.
http://phpnico.wordpress.com
  #3 (permalink)  
Antiguo 18/11/2011, 07:44
 
Fecha de Ingreso: noviembre-2011
Mensajes: 20
Antigüedad: 13 años, 1 mes
Puntos: 0
Respuesta: Autocomplementar con Jquery

Ok muchas gracias así lo entiendo, pero no se como implementarlo con ajax en lugar de un array
  #4 (permalink)  
Antiguo 18/11/2011, 08:03
Avatar de linuxzero  
Fecha de Ingreso: noviembre-2011
Ubicación: Argentina
Mensajes: 778
Antigüedad: 13 años, 1 mes
Puntos: 160
Respuesta: Autocomplementar con Jquery

Código javascript:
Código Javascript:
Ver original
  1. $.ajax({
  2.     url: "RUTA_AL_PHP",
  3.     type: "post",
  4.     dataType: 'json',
  5.     success: function(datos) {
  6.         $("#idCampo").autocomplete({
  7.             source: datos,
  8.             select: function(event, ui) {
  9.                 $('#idCampoHidden').val(ui.item.key);
  10.             }
  11.         });
  12.     }
  13. });

En el codigo php tenes que asegurarte de devolver un vector con el dato resultante de la consulta con la siguiente estructura y una vez formado el vector le aplicas el json_encode() y lo imprimis por pantalla para que lo tome el ajax. Quedaria algo asi:

Código PHP:
Ver original
  1. // TENES QUE HACER EL QUERY DONDE EL WHERE SEA EL LIKE DE LO QUE EL USUARIO TIPEA EN EL CAMPO DEL AUTOCOMPLETE
  2. $resultado = Array('key' => $id_del_resultado, 'value' => $valor_del_resultado);
  3. echo json_encode($resultado);

Con este ejemplo necesitas 2 campos: un campo del tipo text donde es donde el usuario va a ingresar la palabra y se le va a autocompletar y otro campo del tipo hidden donde una vez que seleccione la palabra del listado que le ofrece el autocomplete se llenara con el id del valor para la utilizacion de alguna consulta que necesites.

Esta es una forma muy facil de hacer un autocomplete con ajax y json. Cualquier cosa avisame ;)
__________________
Si todo fuera tan sencillo como un symfony cc la vida seria más fácil.
http://phpnico.wordpress.com
  #5 (permalink)  
Antiguo 18/11/2011, 08:29
 
Fecha de Ingreso: noviembre-2011
Mensajes: 20
Antigüedad: 13 años, 1 mes
Puntos: 0
Respuesta: Autocomplementar con Jquery

No entiendo muy bien el archivo php seria algo asi

Código PHP:
Ver original
  1. $nit = $_GET[id];  
  2. if (!$nit) return;
  3.  
  4. $sql = "(SELECT id
  5.              FROM tabla
  6.              WHERE LIKE '%id%'  ";
  7.        
  8. $result = mysql_query($sql);
  9.  
  10. $array_resultado =array();
  11.  
  12. while($rows = mysql_fetch_array($result)){
  13.     $array_resultado = Array('key' => $rows[id], 'value' => $rows[id]);
  14.     print_r($array_resultado);
  15. }

muchas gracias
  #6 (permalink)  
Antiguo 18/11/2011, 08:36
 
Fecha de Ingreso: noviembre-2011
Mensajes: 20
Antigüedad: 13 años, 1 mes
Puntos: 0
Respuesta: Autocomplementar con Jquery

perdón envié mal el código php en realidad seria algo asi


Código PHP:
Ver original
  1. $nit = $_POST[id]; *
  2. if (!$nit) return;
  3. *
  4. $sql = "(SELECT id
  5. * * * * * * *FROM tabla
  6. * * * * * * *WHERE LIKE '%id%' *";
  7. * * * *
  8. $result = mysql_query($sql);
  9. *
  10. $array_resultado =array();
  11. *
  12. while($rows = mysql_fetch_array($result)){
  13. * * $array_resultado = Array('key' => $rows[id], 'value' => $rows[id]);
  14. * * echo json_encode($array_resultado);
  15. }

recibo con POST y cambio el print_r() por json_encode($array_resultado);
  #7 (permalink)  
Antiguo 18/11/2011, 08:39
Avatar de linuxzero  
Fecha de Ingreso: noviembre-2011
Ubicación: Argentina
Mensajes: 778
Antigüedad: 13 años, 1 mes
Puntos: 160
Respuesta: Autocomplementar con Jquery

Si pero el json_encode() hacelo fuera del while, asi envia el vector completo, y no cada posicion del mismo como esta en tu código.
__________________
Si todo fuera tan sencillo como un symfony cc la vida seria más fácil.
http://phpnico.wordpress.com
  #8 (permalink)  
Antiguo 18/11/2011, 08:49
 
Fecha de Ingreso: noviembre-2011
Mensajes: 20
Antigüedad: 13 años, 1 mes
Puntos: 0
Respuesta: Autocomplementar con Jquery

ok aun asi no funciona voy a subir el codigo completo a ver que error encuentras

codigo javascript

Código Javascript:
Ver original
  1. <script src="./../js/jquery-1.5.1.min.js"></script>
  2. <script src="./../js/jquery-ui-1.8.13.custom.min.js"></script>
  3.  
  4. <script type="text/javascript">
  5.     $(function() {
  6.         $.ajax({
  7.         * * url: "ajax_id.php",
  8.         * * type: "post",
  9.         * * dataType: 'json',
  10.         * * success: function(datos) {
  11.         * * * * $("#id").autocomplete({
  12.         * * * * * * source: datos,
  13.         * * * * * * select: function(event, ui) {
  14.         * * * * * * * * $('#id_hidden').val(ui.item.key);
  15.         * * * * * * }
  16.         * * * * });
  17.         * * }
  18.         });
  19.     });
  20. </script>


codigo html

Código HTML:
Ver original
  1. <input type="text" id="id" name="id"/>
  2. <input type="hidden" id="id_hidden" name="id_hidden" />

codigo php

Código PHP:
Ver original
  1. $nit = $_POST[id]; *
  2. if (!$nit) return;
  3. *
  4. $sql = "(SELECT id
  5. * * * * * * *FROM tabla
  6. * * * * * * *WHERE LIKE '%id%' *";
  7. * * * *
  8. $result = mysql_query($sql);
  9. *
  10. $array_resultado =array();
  11. *
  12. while($rows = mysql_fetch_array($result)){
  13. * * $array_resultado = Array('key' => $rows[id], 'value' => $rows[id]);
  14. }
  15.  
  16. echo json_encode($array_resultado);
  #9 (permalink)  
Antiguo 18/11/2011, 08:57
Avatar de linuxzero  
Fecha de Ingreso: noviembre-2011
Ubicación: Argentina
Mensajes: 778
Antigüedad: 13 años, 1 mes
Puntos: 160
Respuesta: Autocomplementar con Jquery

No se como sera tu campo autocomplete, pero la idea seria mas o menos asi:

Código PHP:
Ver original
  1. <?php
  2. $nit = $_POST[id];
  3. if (!$nit) return;
  4.  
  5. $sql = "SELECT id, nombre FROM tabla";
  6. $result = mysql_query($sql);
  7.  
  8. $array_resultado =array();
  9.  
  10. while($rows = mysql_fetch_array($result)){
  11.     $array_resultado = Array('key' => $rows['id'], 'value' => $rows['nombre']);
  12. }
  13.  
  14. echo json_encode($array_resultado);
  15. ?>

Te comento lo que hice, fijate que la consulta la modifique, trae la dupla id, nombre sin condicion, porque de lo que te devuelve es el vector en json que le pasas al autocomplete que despues el plugin se encarga de buscarlo dentro del array solo por su cuenta, por eso le pasas toda la info completa, sin condicion.

Despues fijate que trae id y nombre, es raro que uses el mismo id para los 2, si es asi, porque tu sistema trabaja asi, cambialo, ami porque me parecio raro, asique este punto que te marco esta sujeto a modificaciones.

Probalo asi y decime! ;)
__________________
Si todo fuera tan sencillo como un symfony cc la vida seria más fácil.
http://phpnico.wordpress.com
  #10 (permalink)  
Antiguo 18/11/2011, 09:13
 
Fecha de Ingreso: noviembre-2011
Mensajes: 20
Antigüedad: 13 años, 1 mes
Puntos: 0
Respuesta: Autocomplementar con Jquery

Ok mira te explicare en Colombia las empresas tiene un identificador llamado nit, es este caso necesito escribir en el input text el numero de nit, por esta razón no veo necesidad de consultar el nombre.

exactamente el código php seria así

Código PHP:
Ver original
  1. <?php
  2. require_once('../conection.php');
  3.  
  4. $sql = "(SELECT DISTINCT nit
  5.         FROM dx_ventas_ano_actual)
  6.         UNION
  7.         (SELECT DISTINCT nit, nombre
  8.         FROM dx_ventas_ano_historial) ";
  9.        
  10. $result = mysql_query($sql);
  11.  
  12. $array_resultado =array();
  13. while($rows = mysql_fetch_array($result)){
  14.     $array_resultado = Array('key' => $rows['nit'], 'value' => $rows['nit']);
  15. }
  16.  
  17. echo json_encode($array_resultado);
  18.  
  19. ?>

Consulto los nit existentes en dos tablas

Una duda adicional al cargar el $array_resultado de esta manera, solo tomaría los últimos resultados del hile no??

Esto lo probe con un print_r($array_resultado)

Muchas gracias eres muy amable.
  #11 (permalink)  
Antiguo 18/11/2011, 09:22
Avatar de linuxzero  
Fecha de Ingreso: noviembre-2011
Ubicación: Argentina
Mensajes: 778
Antigüedad: 13 años, 1 mes
Puntos: 160
Respuesta: Autocomplementar con Jquery

tenes que hacer el array acumulativo, que seria asi:

Código PHP:
Ver original
  1. while($rows = mysql_fetch_array($result)){
  2.     $array_resultado[] = Array('key' => $rows['nit'], 'value' => $rows['nit']);
  3. }

Sino te tomaria solo el último, y no todos.
__________________
Si todo fuera tan sencillo como un symfony cc la vida seria más fácil.
http://phpnico.wordpress.com
  #12 (permalink)  
Antiguo 18/11/2011, 09:33
 
Fecha de Ingreso: noviembre-2011
Mensajes: 20
Antigüedad: 13 años, 1 mes
Puntos: 0
Respuesta: Autocomplementar con Jquery

OK funciona a la perfección muchas gracias, solo tendría una ultima duda de casualidad sabes como modificar el css para que no se vean tan grandes las opciones?

Y de nuevo muchísimas gracias.
  #13 (permalink)  
Antiguo 18/11/2011, 09:48
Avatar de linuxzero  
Fecha de Ingreso: noviembre-2011
Ubicación: Argentina
Mensajes: 778
Antigüedad: 13 años, 1 mes
Puntos: 160
Respuesta: Autocomplementar con Jquery

usas el jqueryui? para los estilos?? si es asi, deberias modificar el css del .ui-widget si mal no recuerdo
__________________
Si todo fuera tan sencillo como un symfony cc la vida seria más fácil.
http://phpnico.wordpress.com
  #14 (permalink)  
Antiguo 25/11/2011, 07:55
 
Fecha de Ingreso: noviembre-2011
Mensajes: 20
Antigüedad: 13 años, 1 mes
Puntos: 0
Respuesta: Autocomplementar con Jquery

Que pena volver a molestar con este tema, pero tengo una nueva duda

¿como puedo limitar el numero de registros que se muestran al ir escribiendo en el textbox?

Esto debido a que al escribir en el textbox, el array tiene demasiados registros y esto hace que el navegador se ejecute con mucha lentitud.
  #15 (permalink)  
Antiguo 25/11/2011, 08:01
Avatar de linuxzero  
Fecha de Ingreso: noviembre-2011
Ubicación: Argentina
Mensajes: 778
Antigüedad: 13 años, 1 mes
Puntos: 160
Respuesta: Autocomplementar con Jquery

Proba agregandole un parametro al autocomplete que se llama minLength, asique te obliga a ingresar una cantidad de caracteres minimos para realizar la consulta a la base y devolverte los resultados.

http://stackoverflow.com/questions/4071887/limit-the-result-in-jquery-autocomplete
__________________
Si todo fuera tan sencillo como un symfony cc la vida seria más fácil.
http://phpnico.wordpress.com
  #16 (permalink)  
Antiguo 25/11/2011, 08:26
 
Fecha de Ingreso: noviembre-2011
Mensajes: 20
Antigüedad: 13 años, 1 mes
Puntos: 0
Respuesta: Autocomplementar con Jquery

OK también funciona, pero existe alguna manera de mostrar solo x numero de registros, por ejemplo de solo mostrar los 20 primeros registros
  #17 (permalink)  
Antiguo 25/11/2011, 08:29
Avatar de linuxzero  
Fecha de Ingreso: noviembre-2011
Ubicación: Argentina
Mensajes: 778
Antigüedad: 13 años, 1 mes
Puntos: 160
Respuesta: Autocomplementar con Jquery

Proba con el atributo: maxItemsToShow. Ej:

Código Javascript:
Ver original
  1. $("#div").autocomplete({
  2.     url:'your-back-end.php'
  3.     minChars: 2,
  4.     maxItemsToShow: 20
  5. });
__________________
Si todo fuera tan sencillo como un symfony cc la vida seria más fácil.
http://phpnico.wordpress.com
  #18 (permalink)  
Antiguo 25/11/2011, 08:49
 
Fecha de Ingreso: noviembre-2011
Mensajes: 20
Antigüedad: 13 años, 1 mes
Puntos: 0
Respuesta: Autocomplementar con Jquery

La pruebo pero no funciona, es algo raro en la documentación que he investigado esta atributo no presenta ningun problema tendra algo que ver con utilizar jquery UI?
  #19 (permalink)  
Antiguo 25/11/2011, 08:51
Avatar de linuxzero  
Fecha de Ingreso: noviembre-2011
Ubicación: Argentina
Mensajes: 778
Antigüedad: 13 años, 1 mes
Puntos: 160
Respuesta: Autocomplementar con Jquery

Proba el de UI a ver que te tira..
__________________
Si todo fuera tan sencillo como un symfony cc la vida seria más fácil.
http://phpnico.wordpress.com
  #20 (permalink)  
Antiguo 25/11/2011, 09:25
 
Fecha de Ingreso: noviembre-2011
Mensajes: 20
Antigüedad: 13 años, 1 mes
Puntos: 0
Respuesta: Autocomplementar con Jquery

buscando en el codigo de UI no contiene el atributo maxItemsToShow.
  #21 (permalink)  
Antiguo 21/12/2011, 11:37
 
Fecha de Ingreso: noviembre-2011
Mensajes: 20
Antigüedad: 13 años, 1 mes
Puntos: 0
Respuesta: Autocomplementar con Jquery

Hola,

Tengo una nueva duda, como puedo saber que NO se ha escogido ninguna opción del autocompletar??

es decir si no escojo ninguna opción de las que este me muestra.

De antemano muchas gracias.
  #22 (permalink)  
Antiguo 21/12/2011, 14:45
Avatar de linuxzero  
Fecha de Ingreso: noviembre-2011
Ubicación: Argentina
Mensajes: 778
Antigüedad: 13 años, 1 mes
Puntos: 160
Respuesta: Autocomplementar con Jquery

depende de como lo configures, hace una prueba facil haciendo un alert del .val()
__________________
Si todo fuera tan sencillo como un symfony cc la vida seria más fácil.
http://phpnico.wordpress.com

Etiquetas: ajax
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 00:01.