23
mar

Autocompletar con jQuery

El plugin autocomplete de jQuery realiza un seguimiento de la información introducida recientemente, como direcciones Web, información de formularios y consultas de búsqueda. A medida que escribes información nueva, autocomplete intentará anticiparse a lo que escribamos y nos ofrecerá posibles coincidencias. Se ahorra tiempo porque no es necesario escribir toda la información: basta con seleccionar la coincidencia del autocomplete.

Primero insertamos las librerías y la hoja de estilo del plugin en el ‘head’:

<link rel="stylesheet" type="text/css" href="css/jquery.autocomplete.css" media="all" />
<script language="javascript" type="text/javascript" src="javascript/jquery/jquery-1.3.2.min.js"></script>
<script language="javascript" type="text/javascript" src="javascript/jquery/jquery.autocomplete.pack.js"></script>
<script language="javascript" type="text/javascript" src="javascript/jquery/jquery.bgiframe.min.js"></script>

La librería jquery.bgiframe.min.js la ulilizamos para IE6, nos ayuda a posicionar bien las capas, más info aquí.

Vamos a ver dos ejemplos, un campo de búsqueda que hace un ‘scandir’ de un directorio y otro campo de búsqueda que consulta los datos en la base de datos.

A) Scandir de un directorio, insertamos el script en el ‘head’:

<script type="text/javascript">
$().ready(function() {
	$("#monumento").autocomplete("fns/images.php", {
		width: 320,
		max: 4,
		highlight: false,
		scroll: true,
		scrollHeight: 300,
		formatItem: function(data, i, n, value) {
			return "<img src='imagenes/" + value + "'/> " + value.split(".")[0];
		},
		formatResult: function(data, value) {
			return value.split(".")[0];
		}
	});
});
</script>

Y en el ‘body’ insertamos el formulario:

<form action="javascript:void(0);" enctype="application/x-www-form-urlencoded" method="post" id="formulario">
	<label for="monumento">Busca monumento</label><br />
	<input type="text" id="monumento" style="width:200px;" /><br /><br />
</form>

La función que se ejecuta en el fichero images.php es el siguiente:

<?php
$term = $_REQUEST['q'];
$images = array_slice(scandir("../imagenes"), 2);
foreach($images as $value) {
	if( strpos(strtolower($value), $term) === 0 ) {
		echo $value . "\n";
	}
}
?>

B) Consultar campos a la base de datos en un campo de búsqueda:

<script type="text/javascript">
$().ready(function() {
	$("#usuarios").autocomplete("fns/usuarios.php", {
		/************************************************************************************************************
		Valores de configuración del autocomplete que se mandan a usuarios.php
		*************************************************************************************************************/
		minChars: 0, /* El número mínimo de caracteres que un usuario tiene que escribir antes de la autocompletar.*/
		width: 320, /* Anchura del listado de búsqueda, si no se indica la anchura se adaptará al input */
		highlight: false, /* Si se indica 'false' no resaltará los valores de búsqueda */
		scroll: true, /* Si tendrá scroll el campo de búsqueda */
		scrollHeight: 300, /* Altura del scroll en el campo de búsqueda */
		formatItem: function(data, i, n, value) { /* Muestra el valor devuelto se dentro de un elemento LI en la lista de resultados. */
			/************************************************************************************************************
			Listado de valores a seleccionar
			*************************************************************************************************************/
			return value; /* Devuélve el valor de la función usuarios.php */
		},
		formatResult: function(data, value) { /* Similar a formatItem, pero proporciona el formato para el valor, que se pondrán en el campo de entrada. */
			/************************************************************************************************************
			devuelve el valor de la cadena que se ha seleccionado partiendo según el carácrete "["
			*************************************************************************************************************/
			return value.split("[")[0]; /* Inserta en el campo de búsqueda el valor pero separa el contenido 'split' */
		}
	});
});
</script>

Y en el ‘body’ insertamos el formulario:

<form action="javascript:void(0);" enctype="application/x-www-form-urlencoded" method="post" id="formulario">
    <label for="usuarios">Busca nombre</label><br />
    <input type="text" id="usuarios" style="width:200px;" /><br /><br />
</form>

La función que se ejecuta en el fichero usuarios.php es el siguiente:

<?
$term = $_REQUEST['q'];
$link = mysql_connect("localhost", "user","password"); /* Conecto a la base de datos */
mysql_select_db("base_de_datos", $link);  /* Seleccion la base de datos */
$sql="SELECT name, email FROM usuarios WHERE name LIKE '%$term%'";
$result = mysql_query($sql, $link);
while ($fila = mysql_fetch_assoc($result)) {
	echo $fila['name']." [".$fila['email']."]<br />\n ";
}
?>

Importante: el script envía los datos por:

<?
$term = $_REQUEST['q'];
?>

Ejemplo aquí.
También podéis ir a la web del autor y ver más ejemplos de este magnífico plugin.

Bookmark and Share
aaa

3 Comentarios

  • neysi Said:

    Hola. El ejemplo 2 No me sale ,no se porque.

    Mi prueba es: Tengo el index.html donde llamo a todos los scripts y el formulario.

    y usuarios.php donde esta el codigo que no presentas en el post modificado segun mi base de datos.

    Pero cuando escribo algo en el formualrio. sale el mismo codigo php en la lista de sugerir. sale “$term = $_REQUEST['q'];” ,etc y no las palabras sugeridas.

    Me puedes decir porque el error?

    Espero tu respuesta

  • Julio Said:

    Hola,
    Seguramente es porque no tendrás ninguna base de datos creada, recuerda que este script llama a una base de datos y selecciona los campos para mostrarlos en el select.

    Un saludo,
    Julio.

  • deomandeo Said:

    Hola, estoy utilizando la opción B, funciona perfectamente.
    Por lo pronto, estoy recuperando un listado de ciudades, pero no he logrado hacer lo siguiente:
    Necesito guardar el ID de la ciudad seleccionada dentro de un campo input oculto en el formulario, pero la verdad es que no doy con la tecla, podrías ayudarme?
    Gracias!

Tienes que estar conectado para publicar un comentario.

Comentarios RSS Feed   TrackBack URL