Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] Hacer desaparecer un div cuando ocurran dos 2 cosas

Estas en el tema de Hacer desaparecer un div cuando ocurran dos 2 cosas en el foro de Javascript en Foros del Web. Hola a todos. Tengo un problemilla que no soy capaz de resolver. Os resumo, estoy implementando una búsqueda de usuarios para una web. Al introducir ...
  #1 (permalink)  
Antiguo 26/11/2013, 06:10
 
Fecha de Ingreso: junio-2012
Mensajes: 147
Antigüedad: 12 años, 5 meses
Puntos: 1
Hacer desaparecer un div cuando ocurran dos 2 cosas

Hola a todos.
Tengo un problemilla que no soy capaz de resolver. Os resumo, estoy implementando una búsqueda de usuarios para una web. Al introducir cualquier caracter en un input text muestro un div con los resultados de la búsqueda. El div no tiene altura definida, por lo que para que desaparezca simplemente vacío el div de contenido con $(".busqueda").html(""), aunque podría hacerlo con un slideup o algún efecto del estilo. Eso da igual.

El problema viene cuando tengo que definir cuando hacer desaparecer el div. Quiero que desaparezca cuando el usuario pinche sobre cualquier elemento que no sea ni el input de la busqueda ni ninguno de los resultados. Para lo primero es facil con focusout. ¿Y para lo segundo? Porque tal y como está ahora mismo, si el usuario pincha sobre cualquier elemento de la búsqueda pero no levanta el dedo del ratón, el div desaparece. Puedo conseguir un efecto parecido al que quiero con un timeout al focusout del input de búsqueda pero queda muy cutre.

Para que os hagais una idea, busco un funcionamiento como el que tienen facebook o twitter en sus motores de búsquedas internos.

Muchas gracias.
  #2 (permalink)  
Antiguo 26/11/2013, 11:48
Avatar de America|UNK  
Fecha de Ingreso: noviembre-2006
Ubicación: Piura - Perú
Mensajes: 582
Antigüedad: 18 años
Puntos: 56
Respuesta: Hacer desaparecer un div cuando ocurran dos 2 cosas

Código javascript:
Ver original
  1. <html>
  2. <head>
  3. <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
  4. <script>
  5. $(document).ready(function(){
  6.  
  7.     var result = $("#result");
  8.  
  9.     $("#search").keyup(function(){
  10.         result["slide" + ($(this).val().length >= 2 ? "Down" : "Up")]();
  11.     });
  12.    
  13.     //es un tipo de simulación de "blur" de cualquier objeto
  14.     //si el objeto clickeado no contiene clase no_cerrar, el DIV desaparece (slideUp)
  15.    
  16.     $(document).click(function(e){
  17.         //objeto clickeado
  18.         var el = $(e.target),
  19.         //si el objeto que lo contiene tambien tiene la clase .no_cerrar
  20.         padre = el.parents(".no_cerrar"),
  21.         //solo mostrar si hay resultados (un ejemplo)
  22.         aparece = $("#search").val().length >= 2 ? true : false;
  23.        
  24.         result["slide" + (aparece && ($(e.target).hasClass("no_cerrar") || padre.length > 0) ? "Down" : "Up")]();
  25.     });
  26.  
  27. });
  28. </script>
  29.  
  30. <style>
  31. .b { height:26px}
  32. ul {margin:0;padding:0}
  33. .b, #result {width:200px; border:1px solid #000;}
  34. #result {background:black; color:#fff; display:none}
  35. li {width:100%; line-height:26px; text-align:center; border-top:1px solid #666}
  36. input {width:100%; height:100%}
  37. </style>
  38. <body>
  39. <b>test </b> <span>test objeto</span>
  40. <div class="b"><input type="text" id="search" placeholder="Escribe 2 letras" class="no_cerrar" /></div>
  41. <ul id="result" class="no_cerrar">
  42.     <li>Result 1</li>
  43.     <li>Result 2</li>
  44.     <li>Result 3</li>
  45. </ul>
  46. </body>
  47. </html>
__________________
/* El que atiende, entiende..., el que entiende, aprende!.
Desarrollo Web Freelance, Contactar */
  #3 (permalink)  
Antiguo 26/11/2013, 13:18
 
Fecha de Ingreso: junio-2012
Mensajes: 147
Antigüedad: 12 años, 5 meses
Puntos: 1
Respuesta: Hacer desaparecer un div cuando ocurran dos 2 cosas

Funciona justo como quería. Mil gracias!!!!

Etiquetas: jquery
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 06:01.