Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] Acción al hacer click fuera de una capa.

Estas en el tema de Acción al hacer click fuera de una capa. en el foro de Javascript en Foros del Web. Hola, como puedo hacer que se ejecute una acción, que será que la capa desaparezca, al hacer clic fuera de ella. Por ejemplo el de ...
  #1 (permalink)  
Antiguo 15/06/2014, 14:57
VityOsma
Invitado
 
Mensajes: n/a
Puntos:
Acción al hacer click fuera de una capa.

Hola, como puedo hacer que se ejecute una acción, que será que la capa desaparezca, al hacer clic fuera de ella.

Por ejemplo el de la siguiente pagina, al abrir la capa de iniciar sesión, si haces clic fuera de ella se oculta y si el clic es en alguno de los demás botones, se ejecuta la función de ficho botón.

http://www.booking.com/
  #2 (permalink)  
Antiguo 15/06/2014, 17:01
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 7 meses
Puntos: 292
Respuesta: Acción al hacer clic fuera de una capa.

Se logra con onClick seguido de OnMouseOver ..... y display:none / block o bien con visibility

Lo probe solo en CHROME ...

Código Javascript:
Ver original
  1. <style type="text/css">
  2.  
  3.  
  4. .toolbar li {
  5.     display:inline; /* los elementos comparten una linea horizontal */
  6.     background-color:#eee;
  7.     border:1px solid;
  8.     border-color:#f3f3f3 #bbb #bbb #f3f3f3;
  9.     margin:0;
  10.     padding:.5em;
  11.     zoom: 1;
  12. }
  13.  
  14. #opt3_sub
  15. {
  16.         display:none;
  17.         margin-left:180px;
  18.         width: 200px;
  19.         min-height: 100px;
  20.         border: solid 1px #bbb;        
  21. }
  22.  
  23. </style>
  24.  
  25. <ul class="toolbar">
  26.  
  27. <li><a href="#" id="opt1">Home</a></li>
  28. <li><a href="#" id="opt2">About us</a></li>
  29. <li><a href="#" id="opt3">Products</a></li>
  30. <li><a href="#" id="opt4">FAQs</a></li>
  31. <li><a href="#" id="opt5">Contact us</a></li>
  32. </ul>
  33.  
  34. <div id="opt3_sub">Alguna cosa</div>
  35.  
  36.  
  37. <script>
  38.  
  39. productos   = document.getElementById('opt3'); 
  40. opt3_sub    = document.getElementById('opt3_sub');
  41.  
  42. Handler1 = function()
  43. {
  44.     opt3_sub.style.display="block";
  45.     console.log('Desplegando');
  46. ;};
  47.  
  48. Handler2 = function()
  49. {
  50.     opt3_sub.style.display="none";
  51.     console.log('Ocultando');
  52. ;};
  53.  
  54.  
  55. productos.addEventListener ('click',Handler1,false);
  56. opt3_sub.addEventListener ('mouseout',Handler2,false);
  57.  
  58.  
  59. </script>
__________________
Salu2!

Última edición por Italico76; 15/06/2014 a las 17:42
  #3 (permalink)  
Antiguo 15/06/2014, 17:56
Avatar de marlanga  
Fecha de Ingreso: enero-2011
Ubicación: Murcia
Mensajes: 1.024
Antigüedad: 13 años, 10 meses
Puntos: 206
Respuesta: Acción al hacer clic fuera de una capa.

hay muchas formas de hacerlo. La que uso es recogiendo los eventos click en el document general y trantarlos. Así la modal sólo se cerrará haciendo click explícitamente, ignorando el mouseout.
http://jsfiddle.net/marlanga/V76uj/
  #4 (permalink)  
Antiguo 16/06/2014, 04:26
VityOsma
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Acción al hacer clic fuera de una capa.

Hola de nuevo, gracias por las respuetas.

Italico, eso no es lo que buscaba, porque no haces clic fuera, y además si no estas encima de la capa al pulsar el botón para mostrarla ni siquiera se muestra.

marlanga, eso si es lo que buscaba aunque no acabo de entenderlo todo, lo que hacer es añadir a todos los elementos del documento la funcion onclick para cerrar la capa y comprobar que el click no haya sido producido en la capa modal ni en ninguno de sus hijos verdad? lo que no entiendo es para que sirve lo de function(e), igual tengo que investigarlo un poco. Que indica esa "e", me lo puedes explicar así por encima? gracias, un saludo.
  #5 (permalink)  
Antiguo 16/06/2014, 06:14
Avatar de marlanga  
Fecha de Ingreso: enero-2011
Ubicación: Murcia
Mensajes: 1.024
Antigüedad: 13 años, 10 meses
Puntos: 206
Respuesta: Acción al hacer clic fuera de una capa.

Los eventos javascript se disparan en cadena. CUnado haces click en un elemento HTML, se dispara su onclick. Luego se dispara el onclick de su padre, luego el onclick del padre de su padre, y así sucesivamente hasta dispara el evento onclick del objeto "document", que es el nodo raiz del árbol DOM de la página, padre ancestro de todos los elementos HTML de una página.

El function (e){ ... } es la función definida por mí que se ejecuta cuando se "captura" un evento con código. El argumento "e" que le paso, es el objeto que representa el evento.
Aquí puedes leer más: http://librosweb.es/javascript/capitulo_6.html

Hay una técnica que se llama "delegación de eventos", que se aprovecha de esta característica de encadenamiento de disparo de eventos. Recojo por ejemplo los eventos "onclick" sobre el objeto document, así que cuando hagas click en cualquier elemento de la página, se disparará mi código. ¿Cómo sé sobre qué elemento se hizo el click realmente? Pues me lo dice el objeto "event", que yo llamo "e", que contiene un montón de información útil directamente relacionada con el tipo de evento disparado.

Y por último, el e.stopPropagation() evita que la cadena de eventos se siga ejecutando, es decir, evita que se ejecute en mi código el evento "onclick" sobre el padre del elemento html que acabo de capturar.

Teniendo estas ideas claras, el código es muy sencillo de entender.
  #6 (permalink)  
Antiguo 21/06/2014, 11:13
VityOsma
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Acción al hacer clic fuera de una capa.

Todo entendido, ya lo añadido a mi web, y además me he quedado con la explicación para poder seguir utilizándolo cuando sea necesario. Muchas gracias, quien quiere institutos teniendo gente así por aquí jeje.

Así que si no he entendido mal, al utilizar function(e){....}, dentro del código de esta función "e" sera el elemento que ha disparado el evento, ¿me equivoco?.

Podría llamar a una función enviando el elemento disparador del evento, por ejemplo "miFuncion(function(e))" ¿podría funcionar? o "miFuncion(e)", o "function(e){miFuncion(e)}" ¿Es esto posible? ¿Cuál sería la sintaxis correcta? Gracias otra vez.
  #7 (permalink)  
Antiguo 21/06/2014, 11:28
Colaborador
 
Fecha de Ingreso: septiembre-2013
Ubicación: España
Mensajes: 3.648
Antigüedad: 11 años, 2 meses
Puntos: 578
Respuesta: Acción al hacer clic fuera de una capa.

No. En todos los navegadores (excepto en IE), a todos los handlers y listeners de los eventos se les pasa un argumento que contiene el correspondiente objeto Event. Tú simplemente estás indicando que dicho objeto va a quedar referenciado en una variable local con nombre "e", que bien podría ser cualquier otro.

De lo que estás hablando es de su propiedad target, ésta contiene el elemento del DOM que disparó el evento.

Saludos
  #8 (permalink)  
Antiguo 21/06/2014, 11:28
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años
Puntos: 977
Respuesta: Acción al hacer clic fuera de una capa.

Claro que es posible, pero cada forma que presentas dependerá de lo que desees hacer pues en JS hasta las funciones pueden ser pasadas como argumentos a otra función.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #9 (permalink)  
Antiguo 21/06/2014, 13:25
VityOsma
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Acción al hacer click fuera de una capa.

Ok, perfecto, tema solucionado.

Gracias a todos.

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




La zona horaria es GMT -6. Ahora son las 18:46.