Ver Mensaje Individual
  #1 (permalink)  
Antiguo 28/05/2010, 02:28
jesusjj
 
Fecha de Ingreso: noviembre-2007
Mensajes: 154
Antigüedad: 14 años, 8 meses
Puntos: 2
Pregunta XAJAX -> Duda en evento "onkeyup" con campo vacío

Buenos días a [email protected]:

Les comento una duda para ver si me pueden echar un cable y de paso, les copio el código funcional al 90% por si le sirve a alguien (por cierto, le dejo las trazas comentadas :-p ).

El tema es que he hecho una búsqueda con 'auto completar' utilizando XAJAX. He creado la función y la he puesto en el evento 'onkeyup' y según va encontrando resultados, muestra una capa oculta y crea una lista con los datos obtenidos.

Hasta aquí todo funciona OK, el problema lo tengo cuando se queda el campo de búsqueda vacío, que no consigo que me vuelva a ocultar la capa. Es decir, si empiezo a escribir , corrijo y se queda en blanco, la idea es que si borro hasta que se quede limpio el campo de texto, se vuelva a ocultar de nuevo la capa, pero lo hace justo al revés, si el campo está vacío, pierde el filtro y muestra todos los resultados.

Pues nada, espero que me puedan echar una mano y espero que le sirva a alguien el código, porque he visto varios temas consultando cómo hacer algo así y que con unas ideas y otras, me han orientado para montar este sistema.

Una última pregunta, para evitar el SQL-Injection, no sé si sería recomendable hacerle algo más, aunque está en una zona 'privada', que no debería ser accesible a nadie, aunque nunca se sabe.

Muchas gracias y un saludo.


Código HTML:
<input type="text" name="busc_alumno" id="busc_alumno" value="Escribe el nombre ..." onkeyup="xajax_buscarAlumno(this.value)" />
<div id="alumnoResult" class="oculto">
<!-- carga resultado de búsuqeda -->
</div> 
Código PHP:
function buscarAlumno($inputText) {
    
// se instancia el objeto para recibir la respuesta
    
$respuesta = new xajaxResponse();
    
    if((
trim($inputText) == "") || (trim($inputText) == "Escribe el nombre ...") || (strlen(trim($inputText)) < )) {
        
$respuesta->assign("alumnoResult","style.display","none");
        
$listadoAlumnos "";
        
    }else{
        
        
$mysql = new MySQL('localhost','root','','lt_diplomas');
        
$sql "select * from diploma_pdf where alumno_nombre like '%".trim($inputText)."%' order by alumno_nombre";
        
$consulta $mysql->consulta($sql);    
        
$total $mysql->num_rows($consulta);
        
//      $respuesta -> alert($total);       
//      $respuesta -> alert($sql);
           
        
if ($total 0) {
//            echo "<br>";            
//            $respuesta -> alert('entramos');
                  
            
$listadoAlumnos "<ul id='listadoAlumnos'>";        
            
            while(
$resultados $mysql->fetch_array($consulta)) {
                
$listadoAlumnos .= "<li><a href='#' onclick='xajax_selectAlumno(\"".$resultados['idDiploma']."\",\"".utf8_decode($resultados['alumno_nombre'])."\")'>".utf8_decode($resultados['alumno_nombre'])."</li>";
            }          
            
            
$listadoAlumnos .= "</ul>";                        
            
        }else{       
            
$listadoAlumnos "No hay coincidencias encontradas.";
//            $respuesta -> alert('na\' que hacer');
            
        
}
//        
            
$respuesta -> assign("alumnoResult","style.display","block");            
//            $respuesta -> alert('llegamos aquí');
            
$respuesta -> assign("alumnoResult","innerHTML",$listadoAlumnos);
            
            return 
$respuesta;
    }    

Pongo el código en jQuery para limpiar y restaurar el texto por defecto en caso de dejar en blanco.

Código:
    // Borra contenido por defecto del campo de búsqueda de alumnos en form alta diploma

        $("#busc_alumno").click(function(){
            var busqueda = $("#busc_alumno").val();
            if (busqueda == "" || busqueda == "Escribe el nombre ...") {
                $("#busc_alumno").val("");                
                event.preventDefault();
            }
            
        });
        
        $("#busc_alumno").blur(function(){
            var busqueda = $.trim($("#busc_alumno").val());
            if (busqueda == "" || busqueda == "Escribe el nombre ...") {
                $("#busc_alumno").val("Escribe el nombre ...");
                //alert("1" + busqueda + "1");                
                event.preventDefault();
            }                    
        });