Foros del Web » Programando para Internet » Javascript »

Problema con click ()

Estas en el tema de Problema con click () en el foro de Javascript en Foros del Web. Hola! Estoy intentando hacer que un div con display:none se muestre al click en un enlace, y que se cierre haciendo click fuera de él. ...
  #1 (permalink)  
Antiguo 12/04/2012, 05:29
 
Fecha de Ingreso: agosto-2011
Mensajes: 58
Antigüedad: 12 años, 9 meses
Puntos: 3
Problema con click ()

Hola!

Estoy intentando hacer que un div con display:none se muestre al click en un enlace, y que se cierre haciendo click fuera de él.

Eso ya lo he conseguido, pero intento que se cierre sólo si haces click fuera, y no consigo que NO se cierre al hacer click dentro de dicho div.

Buscando la solución, encontré la función stopPropagation, que es precisamente la que necesito, pero no sé por qué, no consigo que funcione.

El código para cerrar es el siguiente

Código Javascript:
Ver original
  1. jQuery("html").click(function()
  2.     {
  3.         close_allowed_tags ();
  4.     });
  5.     jQuery("#form-allowed-tags").click(function(event)
  6.     {  
  7.         alert ("hola"); // esto es para comprobar que detecta que el click es dentro del div
  8.         event.stopPropagation();
  9.     });

La cosa es que tampoco funciona el "alert", por lo que el problema no está en el stopPropagation, sino en todo caso en el click() (supongo). Ninguna solución que he encontrado me ha servido, ya que todos los ejemplos que ponen son como mi código (o más bien mi código es como los ejemplos).

Gracias y un saludo.
  #2 (permalink)  
Antiguo 12/04/2012, 07:58
Avatar de sneyder05  
Fecha de Ingreso: enero-2009
Ubicación: Cali
Mensajes: 172
Antigüedad: 15 años, 3 meses
Puntos: 17
Mensaje Respuesta: Problema con click ()

Saludos naggety

Cita:
La cosa es que tampoco funciona el "alert"
Entonces el problema radica en el selector que tienes(jQuery("#form-allowed-tags")), y si el evento no se dispara es porque ese control no existe o lo creaste por medio de AJAX o por JS, si ese es el caso, pues deberías usar live para registrar un evento.
__________________
{
job: 'freelance',
contact: '[email protected]'
}
  #3 (permalink)  
Antiguo 12/04/2012, 08:21
 
Fecha de Ingreso: agosto-2011
Mensajes: 58
Antigüedad: 12 años, 9 meses
Puntos: 3
Respuesta: Problema con click ()

Hola sneyder05, gracias por contestar.

#form-allowed-tags no lo creo con ajax ni JS. Está creado, pero oculto con CSS.

Posteriormente utilizo jQuery("#form-allowed-tags") para hacerlo visible, y funciona perfectamente. Lo hago con: jQuery("#form-allowed-tags").css("display","block").

De JS y jQuery sé poquito, así que no entiendo qué quieres decir exactamente con que el control no existe. En cuanto a lo de registrar un evento, tampoco sé a qué te refieres. ¿Podrías explicarme qué quieres decir con eso?

Muchas gracias.
  #4 (permalink)  
Antiguo 12/04/2012, 08:28
Avatar de sneyder05  
Fecha de Ingreso: enero-2009
Ubicación: Cali
Mensajes: 172
Antigüedad: 15 años, 3 meses
Puntos: 17
Mensaje Respuesta: Problema con click ()

Saludos naggety

Cita:
utilizo jQuery("#form-allowed-tags") para hacerlo visible, y funciona perfectamente
Si es así, el control sí existe porque pudiste mostrarlo, entonces eso indica que el código donde registrar el evento click jQuery("#form-allowed-tags").click(function(event) no se está ejecutando.

PD: Cuando digo registrar un evento me refiero a crear el .click, .change u otra función.
__________________
{
job: 'freelance',
contact: '[email protected]'
}
  #5 (permalink)  
Antiguo 12/04/2012, 08:37
 
Fecha de Ingreso: agosto-2011
Mensajes: 58
Antigüedad: 12 años, 9 meses
Puntos: 3
Respuesta: Problema con click ()

Es decir, que ese .click(function(event) ES registrar el evento ??

Alguna idea de por qué no funciona?

Gracias nuevamente, un saludo.
  #6 (permalink)  
Antiguo 12/04/2012, 08:39
Avatar de sneyder05  
Fecha de Ingreso: enero-2009
Ubicación: Cali
Mensajes: 172
Antigüedad: 15 años, 3 meses
Puntos: 17
Mensaje Respuesta: Problema con click ()

Saludos naggety

Correcto, eso es registrar un evento.

Ahora, para determinar porqué no funciona tu código sería necesario ver el archivo completo y la estructura HTML que tienes, ya que la sintaxis de tu código está bien.
__________________
{
job: 'freelance',
contact: '[email protected]'
}
  #7 (permalink)  
Antiguo 12/04/2012, 09:01
 
Fecha de Ingreso: agosto-2011
Mensajes: 58
Antigüedad: 12 años, 9 meses
Puntos: 3
Respuesta: Problema con click ()

Hola otra vez.

He conseguido que funcione, pero estoy muy extrañado. He hecho lo siguiente:

Código Javascript:
Ver original
  1. function no_propagation (e)
  2.     {  
  3.         //alert ("hola");
  4.         e.stopPropagation();
  5.     }

Y en el div en cuestión he puesto un:

Código HTML:
Ver original
  1. onClick="no_propagation(event);"

Como digo, así ya funciona, pero no entiendo por qué de la otra forma no....
  #8 (permalink)  
Antiguo 12/04/2012, 09:10
Avatar de sneyder05  
Fecha de Ingreso: enero-2009
Ubicación: Cali
Mensajes: 172
Antigüedad: 15 años, 3 meses
Puntos: 17
Mensaje Respuesta: Problema con click ()

Saludos naggety

Te funciona porque has hecho el evento in-line, es decir registraste el evento cuando creaste el elemento en el HTML, cosa que usando jQuery sería mala programación.
__________________
{
job: 'freelance',
contact: '[email protected]'
}
  #9 (permalink)  
Antiguo 12/04/2012, 11:15
 
Fecha de Ingreso: agosto-2011
Mensajes: 58
Antigüedad: 12 años, 9 meses
Puntos: 3
Respuesta: Problema con click ()

¡Hola! ¡Ya está solucionado!

Como de costumbre, era una tontería. Efectivamente, como tú decías ¡el elemento no existía!.

Había puesto el código JS justo antes que el div, con lo cual el navegador intentaba registrar un evento a un div que aún no existía (se iba a crear justo después).

Registrando el evento después de haber cargado todo el documento, ya funciona:
Código Javascript:
Ver original
  1. jQuery(document).ready( function () {
  2.     jQuery ("#form-allowed-tags").click( function(event) {
  3.         alert ("hola");
  4.         event.stopPropagation();
  5.     });
  6. });

El motivo por el que podía mostrarlo, es que no lo hacía registrando un evento en ese div, sino modificando una propiedad CSS suya, y el evento disparador estaba en un botón aparte.

Gracias por tu ayuda, un saludo.
  #10 (permalink)  
Antiguo 12/04/2012, 11:25
Avatar de sneyder05  
Fecha de Ingreso: enero-2009
Ubicación: Cali
Mensajes: 172
Antigüedad: 15 años, 3 meses
Puntos: 17
Mensaje Respuesta: Problema con click ()

Saludos naggety

Que bien que se haya solucionado.

Para simplificar el código puedes usar $ en vez de jQuery
__________________
{
job: 'freelance',
contact: '[email protected]'
}
  #11 (permalink)  
Antiguo 13/04/2012, 03:59
 
Fecha de Ingreso: agosto-2011
Mensajes: 58
Antigüedad: 12 años, 9 meses
Puntos: 3
Respuesta: Problema con click ()

Saludos sneyder05.

Hasta ahora siempre usaba $, pero por algún motivo, no me funciona. La consola web me dice '$ is not a function'.

Un saludo.

Etiquetas: funcion, html, 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




La zona horaria es GMT -6. Ahora son las 10:31.