2011-07-22 9 views
5

HTML¿Cómo adjuntar una devolución de llamada onclick a un div pero no en un enlace dentro del div?

<div class='item_container'> 

[...bunch of links and pictures...] 
<a class='item_owner'>John Doe</a> 

</div> 

Javascript

/** 
    Bind the onclick only if you hover on the item since we got a lot 
    of items and several events and plugins to setup on them. 
*/ 
$('.item_container').live('mouseenter', function(e){ 
    $this = $(this); 
    if (!$this.data('isSetup')) { 
    $this.click(function(e){ 
     // do magic 
     return false; 
    }); 
    [... a lot of other stuff] 
    $this.data({'isSetup': true}); 
    } 
}); 

Por supuesto, al hacer clic en cualquier parte del div, se realiza 'hacer magia'. Gracias a return false, si hago clic en cualquier enlace en el div, que todavía se realiza 'hacer magia' y no cambia la página, que es el comportamiento esperado.

Pero hay un enlace que se supone que realmente cambiar la página, el enlace propietario. El problema es que, con mi configuración actual, evito que funcione.

+0

es lo que hace el mismo si utiliza 'e.preventDefault()'? – ianbarker

+0

comprueba el tipo de elemento al que se hace clic ... this.tagName. Si es un enlace el no devuelve falso ... – 2GDev

+0

@ 2GDev: haz una respuesta. Si funciona, obtendrás el representante –

Respuesta

4

Debe detener la propagación del evento de los enlaces al padre .item_container.

Añadir este bloque con el código:

$('.item_container a.item_owner').live('click', function(e){ 
e.stopPropagation(); 
}); 
+0

Rendimiento sabio $ ('div.item_container a.item_owner') sería mejor selector – MaMa

+0

Esto funcionaría muy bien si no tuviera otros enlaces en el div que no deberían detenerse la propagación Solo el enlace del propietario debe activar un cambio de página. Los demás no deberían, y al hacer clic en ellos, deberían realizar "hacer magia" igual que el resto del área. –

+0

@ e-satis: compruebe la respuesta actualizada. – Chandu

Cuestiones relacionadas