2011-08-03 13 views
12

Tengo un selector que vincula un evento de clic que eliminará el elemento emergente. Sin embargo, solo deseo que el selector maneje el clic, en lugar de los elementos secundarios del selector para poder activar el evento de clic.Prevenir el clic desde el evento de activación del elemento principal de activación infantil

Mi código:

<div id="popup"> 
    <div class="popup-content">Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.</div> 
</div> 

Al hacer clic en .popup-content, se disparará el evento click cuando no quiero que los hijos de #popup para hacerlo.

El Código jQuery:

$('#popup').bind('click', function() 
{ 
    $(this).remove(); 
}); 
+1

posible duplicado de [la propagación de eventos de clic jQuery] (http://stackoverflow.com/questions/2244320/jquery-click-event-propagation) –

Respuesta

14

intento:

e.stopPropagation(); 
return false; 

en el controlador de eventos

+2

'false' de retorno es el mismo que llamar' e.stopPropagation() '* y *' e.preventDefault() '. –

+0

Ah, no sabía mucho sobre el uso de 'stopPropagation', ¡gracias! – MacMac

+0

+1, gracias por esto, yo tampoco sabía acerca de 'stopPropagation()' –

0
$('.popup-content').bind('click', function(e) 
{ 
    e.stopPropagation(); 
}); 

o

$('.popup-content').bind('click', function(e) 
{ 
    return false; 
}); 

En su caso, es lo mismo, pero a veces no puede hacer tal cosa sin e.stopPropagation(). Por ejemplo:

$('.popup-content a').bind('click', function(e) 
{ 
    e.stopPropagation(); 
    return confirm("Are you sure?"); 
}); 
18

En el controlador de eventos para #popup verificación si e.target == this. es decir .:

$('#popup').bind('click', function(e) { 
    if(e.target == this) $(this).remove(); 
}); 

hacer esto es mucho más fácil que la unión clic controladores adicionales para todos los niños.

+1

Gracias por el ejemplo alternativo para manejar el clic principal, pero permitir que los niños tengan sus propios controladores. Exactamente lo que necesitaba verificar. Usé 'if (! $ (E.target) .is ('a'))' en lugar de 'if (e.target == this)', pero esto me puso en el camino correcto. –

+0

Necesitaba usar if (! $ (E.target) .is ('a')) también. Lo usé en 'cada' función (tal vez usar un bucle determina la solución) –

0
{if(e.target == this){ return;}}); 
Cuestiones relacionadas