2011-05-19 12 views
29

Al hacer clic en los elementos en jQuery se produce una burbuja hasta el cuerpo. Si tenemos un manejador de clics enlazado al cuerpo que muestra una alerta, al hacer clic en cualquier elemento, se activará el cuerpo y se activará la alerta. Mi pregunta es, ¿hay alguna manera de saber si la alerta corporal se activó como resultado de un clic directo al cuerpo, o se activó el clic debido a una burbuja hasta el cuerpo?¿Hay alguna manera de verificar si la burbuja activó el clic?

+1

lo que haga, tenga cuidado con stopPropagation. Eso romperá todas las llamadas '.live'. –

Respuesta

51

Comparar event.target a . this es siempre el evento donde está vinculado el controlador; event.target es siempre el elemento donde se originó el evento.

$(document.body).click(function(event) { 
    if (event.target == this) { 
     // event was triggered on the body 
    } 
}); 

En el caso de elementos que sabes que es único en un documento (básicamente, simplemente body) se puede consultar también la nodeName de this:

$(document.body).click(function(event) { 
    if (event.target.nodeName.toLowerCase() === 'body') { 
     // event was triggered on the body 
    } 
}); 

que tiene que hacer toLowerCase() porque el caso of nodeName es inconsistente en todos los navegadores.

Una última opción es comparar a un ID si su elemento tiene uno, porque estos también tienen que ser únicos:

$('#foo').click(function(event) { 
    if (event.target.id === 'foo') { 
     // event was triggered on #foo 
    } 
}); 
+0

Gracias por las explicaciones. – Pinkie

+0

Hombre, muchas gracias! :) –

5

puede comprobar lo que se ha hecho clic con event.target:

$(something).click(function(e){ 
    alert(e.target) 
}) 
2

El parámetro "evento" se pasa al manejador tiene una propiedad "objetivo", que se refiere al elemento que fue el blanco directo del evento. Puede verificar esa propiedad para ver si es el elemento <body>.

Tenga en cuenta que la instalación jQuery ".delegate()" se puede utilizar para hacer esa comprobación por usted.

Cuestiones relacionadas