2011-08-03 23 views
12

Mam selektor wiążący zdarzenie click, które usunie popup. Jednak chcę, aby selektor obsługiwał kliknięcie, zamiast elementów podrzędnych selektora, aby móc wywołać zdarzenie click.Zapobieganie kliknięciu wyzwalacza nadrzędnego wyzwalacza potomnego

Mój kod:

<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> 

Po kliknięciu na .popup-content będzie ognia zdarzenie click, gdy nie chcę dzieci #popup zrobić.

Kodeks jQuery:

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

możliwe duplikat [propagacji zdarzenia kliknięcia Jquery] (http://stackoverflow.com/questions/2244320/jquery-click-event-propagation) –

Odpowiedz

14

try:

e.stopPropagation(); 
return false; 

w swojej obsługi zdarzeń

+2

'FALSE powrotnego jest taki sam jak wywoływanie' e.stopPropagation() '* i *' e.preventDefault() '. –

+0

Ah, nie wiedziałem zbyt wiele o korzystaniu z 'stopPropagation', dzięki! – MacMac

+0

+1, dziękuję za to, ja też nie wiedziałem o 'stopPropagation()' –

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

lub

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

W twoim przypadku - to samo, ale czasami nie możesz tego zrobić bez e.stopPropagation(). Na przykład:

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

W swojej obsługi zdarzeń dla #popup sprawdzić czy e.target == this. tj .:

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

Jest to znacznie łatwiejsze niż wiązanie dodatkowych programów do obsługi kliknięć do wszystkich dzieci.

+1

Dzięki za alternatywny przykład obsługi kliknięcia nadrzędnego, ale pozwól dzieciom mieć własne procedury obsługi. Dokładnie to, co musiałem sprawdzić. Użyłem 'if (! $ (E.target) .is ('a'))' zamiast 'if (e.target == this)', ale to ustawiło mnie na właściwej ścieżce. –

+0

Potrzebowałem użyć, jeśli (! $ (E.target) .is ("a")), jak również. Użyłem go w funkcji "każdy" (może za pomocą pętli określa rozwiązanie) –

Powiązane problemy