2011-09-14 25 views
5

Super-technical drawingjQuery: Haga clic en * * Sólo este elemento

En el dibujo altamente artística más arriba, el cuadrado verde es un hijo de la rosa. El rosa está envuelto alrededor del verde por mi función, por lo que el cuadrado verde podría ser cualquier cosa: un hipervínculo, una imagen, un botón, etc.

Quiero capturar un clic en el div rosa SOLAMENTE si no es así t un clic en el elemento verde también.

Esto se puede hacer volteando un booleano con mouseenter en el recuadro verde, pero parece una manera desordenada de hacerlo conmigo.

¿Alguna pista?

EDITOR IMPORTANTE: No puedo meterme con el cuadrado verde, así que no agrego nada al evento click.

+3

que más me molesta que así que no me deja crear la nueva etiqueta 'emocionante imagen' = [ –

+0

hace en este tema: http://stackoverflow.com/questions/ 6635659/jquery-bind-click-anything-but-element es sobre el mismo problema que el tuyo? – JMax

+0

Similar, pero no del todo. –

Respuesta

8

Usted puede hacer esto:

$('.pink-box-selector').click(function(e) { 
    if ($(e.target).is('.pink-box-selector')) { 
     // do stuff here 
    } 
}); 
+0

Como nota al margen, una de las ventajas de esta solución es que no tiene que modificar el código en función del elemento que envuelve (ya que dijo que el elemento envuelto puede variar). Básicamente, es una lista blanca, frente a una lista negra. – jmar777

+0

Perfecto. Aclamaciones. –

1

¿Lo ayudaría $("#div_id :not('#excluded_element')).click();? http://api.jquery.com/not-selector/

+1

Este selector no seleccionaría nada. Buscaría algo * dentro * de '# div_id' que * no es * el único elemento que está realmente allí. – jmar777

+0

@ jmar777 Muy bien observado. –

0

instalación de un detector de eventos click separado para el elemento "verde" y tiene que event.preventDefault()

5

dos opciones. Primero puede verificar si el objetivo es el div verde.

$('#pinkdiv').click(function(e) { 
    if ($(e.target).is('#greendiv')) return; 
    // handle the event 
}); 

O puede escribir el controlador de clic para el div rosa normalmente y dejar de clics en el div verde de propagación.

$('#greendiv').click(function(e) { 
    e.stopPropagation(); 
}); 
+0

La solución de @ jmar777 para la primera opción de comprobar si el objetivo es el div rosado puede tener más sentido. –

+0

Este también es bueno :) – jmar777

Cuestiones relacionadas