Ver Mensaje Individual
  #1 (permalink)  
Antiguo 31/01/2009, 14:18
Avatar de tangela
tangela
 
Fecha de Ingreso: octubre-2004
Mensajes: 31
Antigüedad: 20 años, 2 meses
Puntos: 0
Pregunta Utilizar autocompletado con varios text.

Hola a todos, vereis, he sacado de un libro sobre AJAX (Manual Imprescindible de Ajax, Javier Mellado Domínguez, Anaya Multimedia) un ejemplo para que aparezca una lista recogida de una base de datos para autocompletar los datos que se van introduciendo en el text.
El ejemplo funciona a la perfección y me vendría muy bien para una aplicación de control de la biblioteca del colegio en que trabajo, lo que pasa es que necesito que el mismo proceso se repita en tres campos distintos (diferentes tablas, también) y no tengo ni idea de como implementarlo.

La aplicación la componen tres archivos: autocompletar.html; funciones.js y proceso.php

Os pego las funciones javascript que hacen el trabajo.
Código javascript:
Ver original
  1. function asignaVariables()
  2. {
  3.     v=1;
  4.     nuevaBusqueda=1;
  5.     busqueda=null;
  6.     ultimaBusquedaNula=null;
  7.     divLista=document.getElementById("lista");
  8.     inputLista=document.getElementById("input_2");
  9.     elementoSeleccionado=0;
  10.     ultimoIdentificador=0;
  11. }
  12.  
  13. unction rellenaLista()
  14. {
  15.     var valor=inputLista.value;
  16.     var reg=/(^[a-zA-Z0-9]{2,40}$)/;
  17.     if (!reg.test(valor))
  18.     {
  19.         divLista.style.display="none";
  20.     }else{
  21.         if(busquedaEnBD()==0)
  22.         {
  23.             busqueda=valor;
  24.             filtraLista(valor);
  25.             if (divLista.childNodes[0]==null)
  26.             {
  27.                 divLista.style.display="none";
  28.                 nuevaCadenaNula(valor);
  29.             }else{
  30.                 reiniciaSeleccion();
  31.                 formateaLista(valor);
  32.             }
  33.         } else{
  34.             busqueda=valor;
  35.             var ajax= nuevoAjax();
  36.             ajax.open("POST", "proceso.php?", true);
  37.             ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  38.             ajax.send("busqueda="+valor);
  39.             ajax.onreadystatechange=function()
  40.             {
  41.                 if (ajax.readyState==4){
  42.                     if (!ajax.responseText){
  43.                         divLista.style.display="none";
  44.                     }else{
  45.                         var respuesta=new Array(2);
  46.                         respuesta = ajax.responseText.split("&");
  47.                         nuevaBusqueda=respuesta[0];
  48.                         if (respuesta[1] !="vacio")
  49.                         {
  50.                             divLista.style.display="block";
  51.                             divLista.innerHTML=respuesta[1];
  52.                             reiniciaSeleccion();
  53.                             formateaLista(valor);
  54.                         } else
  55.                         {
  56.                          nuevaCadenaNula(valor);
  57.                         }
  58.                     }  
  59.                 }
  60.             }
  61.         }  
  62.     }
  63. }
El código del formulario html es el siguiente:
Código html:
Ver original
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.3w.org/TR/html4/strict.dtd">
  2. <title> Ejemplo autocompletar</title>
  3. <link rel="stylesheet" type="text/css" href="estilo.css">
  4. <script type="text/javascript" src="funciones.js"></script>
  5. <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
  6. </head>
  7.     <body onload="asignaVariables();">
  8.         <div id="contenedor">
  9.             <table>
  10.                 <tr>
  11.                 <td><label id="Nome">Nome: </label></td>
  12.                 <td>
  13.                 <input name="Nome" type="text" id="input_2" autocomplete="off" class="input" size="85" width="100px" onfocus="
  14.                 if (document.getElementById('lista').childNodes[0] !=null && this.value !=''){
  15.                 filtraLista(this.value);
  16.                 formateaLista(this.value);
  17.                 reiniciaSeleccion();
  18.                 document.getElementById('lista').style.display='block';
  19.                 }"
  20.                 onblur="if (v==1) document.getElementById('lista').style.display='none';"
  21.                 onkeyup="if (navegaTeclado(event)==1){rellenaLista();}"></input>
  22.                 <div id="lista" onmouseout="v=1;" onmouseover="v=0;"></div>
  23.                 </td>
  24.                 </tr>
  25.                
  26.             </table>
  27.         </div> 
  28.     </body>
  29. </html>
El código PHP:
Código php:
Ver original
  1. <?php
  2. function validaBusqueda($parametro)
  3. {
  4.     if(eregi("^[a-zA-Z0-9]{2,40}$",$parametro)) return TRUE;
  5.     else return FALSE;
  6. }
  7. if(isset($_POST["busqueda"]))
  8. {
  9.     $valor=$_POST["busqueda"];
  10.     if (validaBusqueda($valor))
  11.     {
  12.         $conexion=mysql_connect("localhost", "root", "") or die(mysql_error());
  13.         mysql_select_db("biblioteca") or die(mysql_error());
  14.         $consulta=mysql_query("SELECT autor FROM autores WHERE autor LIKE '".$valor."%' ORDER BY autor LIMIT 0, 60");
  15.         mysql_close($conexion);
  16.         $cantidad=mysql_num_rows($consulta);
  17.         if($cantidad==0)
  18.         {
  19.             echo "0&vacio";
  20.         }
  21.         else
  22.         {
  23.             if($cantidad>20) echo "1&";
  24.             else echo "0&";
  25.            
  26.             $cantidad=1;
  27.             while(($registro=mysql_fetch_row($consulta)) && $cantidad<=20)
  28.             {
  29.                 echo "<div onClick=\"clickLista(this);\" onMouseOver=\"mouseDentro(this);\">".$registro[0]."</div>";
  30.                 $cantidad++;
  31.             }
  32.         }
  33.     }
  34. }
  35. ?>
Me gustaría saber como hacer para incluir otros campos de texto y que accedan también a estas funciones aún cuando deban ir a otras tablas.

Espero haberme explicado bien; si necesistais otras partes del código, no hay más que decirlo.
Gracias y un saludo.
PD: A los moderadores: no sé si es correcto poner tanto código en un post, pero no sé tampoco si se pueden adjuntar ficheros. Mis disculpas si incurrí en alguna falta; ha sido por desconocimiento.

Última edición por tangela; 04/02/2009 a las 16:11 Razón: resaltar codigo