autocompletar varios inputs a traves de un input

Imagen de goku_77
AdjuntoTamaño
Image icon inputautocompletar.JPG12.01 KB
Image icon inputautocompletar1.JPG11.08 KB

Forums: 

Tengo 4 archivos:
1.-index.html
2.-consulta.php
3.-ajax.js
4.-style.css

index.html es donde ingresas los datos
consulta.php hace la consulta del dato que estoy introduciendo en el index.html a través de ajax.js, pero aqui esta el detalle que no se que tengo que modificar para que me imprima en varios. Porque solo me imprime en dos pero quiero que imprima en mas de dos. Leagradeceria encarecidamente la ayuda, es para un proyecto, lo estoy haciendo solo. Por favor!

index.html

AJAX: Autocompletar

Código que ayuda a autocompletar el texto segun contenido de la base de datos. Muestra el identificador del campo seleccionado.

Cédula:
Nombre y Apellido:
Cargo:

consulta.php

<?php
// Fichero que realiza la consulta en la base de datos y devuelve los resultados
if(isset($_POST["word"]))
{
// Conectamos con la base de datos
$link=mysql_connect("localhost", "root", "pepe");
mysql_select_db("curso", $link);

if($_POST["word"]{0}=="*")
$result=mysql_query("SELECT * FROM empleado WHERE cedula LIKE '%".substr($_POST["word"],1)."%' ORDER BY cedula LIMIT 10",$link);
else
$result=mysql_query("SELECT * FROM empleado WHERE cedula LIKE '".$_POST["word"]."%' ORDER BY cedula LIMIT 10",$link);

//vamos a emitir en formato xml
header("Content-type: text/xml");
echo '<?xml version="1.0" encoding="iso-8859-15" ?>';
echo "";
$label.="";
while($row=mysql_fetch_array($result))
{
if(strtoupper($_POST["word"])==strtoupper($row["cedula"]))
echo "".$row["nombre"].", ".$row["apellido"].""; //unicamente enviamos el identificador si se tenemos la palabra exacta
else
$label.="\n".$row["cedula"]."";
}
$label.="";
echo $label."";
}

/* La estructura el xml es similar a esta:
<?xml version="1.0" encoding="iso-8859-15" ?>

palabras
palabras
palabras
palabras
palabras

*/
?>

ajax.js

var Conexion=false; // Variable que manipula la conexion.
var Servidor="consulta.php"; // Determina la pagina donde buscar
var Palabra=""; //Determina la ultima palabra buscada.

// funcion que realiza la conexion con el objeto XMLHTTP...
function Conectar()
{
if(window.XMLHttpRequest)
Conexion=new XMLHttpRequest(); //mozilla
else if(window.ActiveXObject)
Conexion=new ActiveXObject("Microsoft.XMLHTTP"); //microsoft
}

function Contenido(idContenido)
{
/* readyState devuelve el estado de la conexion. puede valer:
* 0- No inicializado (Es el valor inicial de readyState)
* 1- Abierto (El método "open" ha tenido éxito)
* 2- Enviado (Se ha completado la solicitud pero ningun dato ha sido recibido todavía)
* 3- Recibiendo
* 4- Respuesta completa (Todos los datos han sido recibidos)
*/

// En espera del valor 4
if(Conexion.readyState!=4) return;
/* status: contiene un codigo enviado por el servidor
* 200-Completado con éxito
* 404-No se encontró URL
* 414-Los valores pasados por GET superan los 512
* statusText: contiene el texto del estado
*/
if(Conexion.status==200) // Si conexion HTTP es buena !!!
{
//si recibimos algun valor a mostrar...
/* Modificamos el identificador idContenido con el valor recibido por la consulta
* Podemos recibir diferentes tipos de datos:
* responseText-Datos devueltos por el servidor en formato cadena
* responseXML-Datos devueltos por el servidor en forma de documento XML
*/
xml=Conexion.responseXML;

var NumberElements = xml.getElementsByTagName('label');

var texto="";
//cogemos el valor del tag del xml
var id=xml.getElementsByTagName('id')[0];
if( id ) //si tiene valor, lo mostramos
document.getElementById("numberId").value=id.childNodes[0].data;
else //si no tiene valor, lipiamos la casilla
document.getElementById("numberId").value="";

//si hay mas de un elemento...
if(NumberElements.length>0 || id)
{
document.getElementById(idContenido).style.display="block";
//bucle para recorrer todos los elementos del xml
for(var i=0; i < NumberElements.length; i++)
{
//window.alert(xml.getElementsByTagName('label')[i].childNodes[0].data);
texto += ""+xml.getElementsByTagName('label')[i].childNodes[0].data+"";
}
}else
document.getElementById(idContenido).style.display="none";
document.getElementById(idContenido).innerHTML=texto;
}else{
document.getElementById(idContenido).innerHTML=Conexion.status+"-"+Conexion.statusText;
}

// Deshabilitamos la visualización del reloj
document.getElementById("reloj").style.visibility="hidden";

Conexion=false;
}

function Solicitud(idContenido,Cadena)
{
// si no recibimos cadena, no hacemos nada.
// Cadena=la cadena a buscar en la base de datos
/* Si cadena es igual a Palabra, no se realiza la busqueda. Puede ser que pulsen la tecla tabulador,
* y no interesa que vuelva a verificar...*/
if(Cadena && Cadena!=Palabra)
{
// Si ya esta conectado, cancela la solicitud en espera de que termine
if(Conexion) return; // Previene uso repetido del boton.

// Realiza la conexion
Conectar();

// Si la conexion es correcta...
if(Conexion)
{
// Habilitamos la visualización del reloj
document.getElementById("reloj").style.visibility="visible";

// Esta variable, se utiliza para igualar con la cadena a buscar.
Palabra=Cadena;

/* Preparamos una conexion con el servidor:
* POST|GET - determina como se envian los datos al servidor
* true - No sincronizado. Ello significa que la página WEB no es interferida en su funcionamiento
* por la respuesta del servidor. El usuario puede continuar usando la página mientras el servidor
* retorna una respuesta que la actualizará, usualmente, en forma parcial.
* false - Sincronizado */
Conexion.open("POST",Servidor,true);

// Añade un par etiqueta/valor a la cabecera HTTP a enviar. Si no lo colocamos, no se pasan los parametros.
Conexion.setRequestHeader("Content-Type","application/x-www-form-urlencoded");

// Cada vez que el estado de la conexión (readyState) cambie se ejecutara el contenido de esta "funcion()"
Conexion.onreadystatechange=function()
{
Contenido(idContenido);
}

date=new Date();
/* Realiza la solicitud al servidor. Puede enviar una cadena de caracteres, o un objeto del tipo XML
* Si no deseamos enviar ningun valor, enviariamos null */
Conexion.send("idContenido="+idContenido+"&word="+Cadena+"&"+date.getTime());
}else
document.getElementById(idContenido).innerHTML="No disponible";
}
}

// Funcion que inicia la busqueda.
// Tiene que recibir el identificador donde mostrar el listado, y la cadena a buscar
function autocompletar(idContenido,Cadena)
{
// Comprovamos que la longitud de la cadena sea superior o igual a 1 caracteres
if(Cadena.length>=1)
{
if(Conexion!=false)
{
// Deshabilitamos la visualización del reloj
document.getElementById("reloj").style.visibility="hidden";
//si esta en medio de una conexion, la cancelamos
Conexion.abort();
Conexion=false;
}
Solicitud(idContenido,Cadena);
}else
document.getElementById(idContenido).style.display="none";
}

// Funcion que se ejecuta cuando seleccionamos un valor del desplegable
function selectItem(idContenido,value)
{
// Cuando pulsamos sobre el desplegable, colocamos el valor en el cuadro de texto
document.getElementById("input").value=value;
//volvemos a indicar que actualice el listado con el nuevo valor
autocompletar(idContenido,value);
}

style.css

body
{
font-family: Arial;
font-size:10px;
}

#input
{
position:relative;
width:50px;
padding: 1pt;
border:1px solid;
}

#numberId
{
width:150px;
position:relative;
border:1px solid;
}

#reloj
{
position:relative;
vertical-align: bottom;
visibility: hidden;
}

#lista
{
width:180px;
background-color:#ffffff;
color:#000000;
border:1px solid;
border-color:#000000;
z-index:1;
display:none;
margin-top: 5px;
}

#lista a
{
display: block;
background-color:#ffffff;
padding: 2pt;
}

#lista a:hover
{
background-color:#00aaaa;
}

CONSULTA

ME PARECE MUY BUENO EL APORTE MOSTRADO, PERO MI CONSULTA ES Q LUEGO DE SELECCIONAR ALGUN ELEMENTO DE LA LISTA ME QUEDA EN PANTALLA UN RECUADRO VACIO A Q SE DEBERA ESO????

GRACIAS

autocompletar otros inputs

oye hermanos disculpen la molestia pero soy nuevo para estos temas

quisiera saber como hacer para que el primer input solamente aparesca el nombre y el segundo input aparesca nombre y en otro input aparesca otros datos
ya lei todos los comentarios pero no entendi nada
alguien me podia ayudar en eso por favor gracias

archivos

Hola se que es viejo el tema, pero alguien puede ayudarme con los archivos de ejemplo apra probarlo? porque no se como seria el index.html por ejemplo. o por ejemplo el archivo envia.php del que se habla luego, se los agradeceria
Saludos

pues te diría que uses un

Imagen de deathUser

pues te diría que uses un framework javascript como jquery o mootools u otros muchos que hay por ahí, jquery trae un plugin para manejar el autocomplete y simplifica realmente la interacción con objetos DOM ...

Mejor crea un nuevo hilo para tu problema específico...

bye
;)

Páginas