2010-11-04 9 views
11

decir que tengo esto:jQuery niño es la captura de clics, solo quieren Padres

<div id="outer"> 
<div id="inner"> 
</div> 
</div> 

Las dimensiones de la div exterior son 500x500, y el interior es de 100x100. Estoy tratando de emplear el siguiente:

$('#outer').click(function() { 
    $('#outer').fadeOut(); 
}); 

Pero cuando se hace clic en el área de 100x100 #inner, todavía se desvanece. ¿Cómo prevenir esto?

+2

que quiere decir que el niño es la captura de clics, y solo quieres el padre – colinmarc

+1

Ah, sí, lo escribí mal. Para ambas personas a continuación, he revisado el título. Quiero que el div externo capte los clics, pero el interno lo ignore. Si el usuario hace clic en 100x100 '# inner' quiero que permanezca abierto, pero si hace clic fuera de eso, tiene que desaparecer. – steve

Respuesta

19

Mejor no asignar los manejadores de clic para los elementos internos. En la función de clic, compruebe el destino del evento igual a externo. Algo así como

$('#outer').click(function(e) { 
    if (e.target.id === "outer"){ 
     $('#outer').fadeOut(); 
    } 
}); 

Working Demo

+0

Esto funciona de manera excelente, y es más limpio IMO. Gracias. – steve

+0

@Rahul ¡PERFECTO! – Steffi

5

captura hace clic en el div interior y evitar que se burbujeo:

$('#inner').click(function(ev) { 
    ev.stopPropagation(); 
}); 

Ésta es, además de su manejador clicker "exterior" por encima.

+0

Necesito '# outer' para capturar clics, y el interno para no. El div interno tendrá enlaces dentro de él, por lo que se debe poder hacer clic en ellos sin que se cierre. Una vez que se hace clic en '# outer', se debe cerrar. – steve

+0

danos cada paso que quieras hacer ... podemos ayudarte. – klox

+0

Ah, volví a aplicar el código anterior y funcionó esta vez. Debe haber escrito algo la última vez. Gracias a todos. – steve

28

me di cuenta de que este código funciona mejor, y no depende de saber Identificación del o de la clase de elemento:

$('#outer').click(function(e) { 
    if (e.target === this){ 
     $('#outer').fadeOut(); 
    } 
}); 
+6

Incluso podría ir más allá y hacer '$ (this) .fadeOut();' –

Cuestiones relacionadas