Mam pole wyboru, które chcę wykonać akcję Ajax na zdarzeniu kliknięcia, jednak pole wyboru znajduje się również w kontenerze z własnym zachowaniem kliknięcia, którego nie chcę uruchamiać po kliknięciu tego pola wyboru. Ten przykład ilustruje to, co chcę zrobić:
$(document).ready(function() {
$('#container').addClass('hidden');
$('#header').click(function() {
if ($('#container').hasClass('hidden')) {
$('#container').removeClass('hidden');
} else {
$('#container').addClass('hidden');
}
});
$('#header input[type=checkbox]').click(function(event) {
// Do something
});
});
#container.hidden #body {
display: none;
}
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<div id="container">
<div id="header">
<h1>Title</h1>
<input type="checkbox" name="test" />
</div>
<div id="body">
<p>Some content</p>
</div>
</div>
Nie mogę jednak wymyślić, jak zatrzymać propagację zdarzenia bez spowodowania, że domyślne zachowanie kliknięcia (pole wyboru zostanie zaznaczone / odznaczone) nie zostanie uruchomione.
Oba poniższe elementy zatrzymują propagację zdarzeń, ale również nie zmieniają stanu pola wyboru:
event.preventDefault();
return false;
javascript
jquery
checkbox
events
roryf
źródło
źródło
Odpowiedzi:
zastąpić
z
event.stopPropagation ()
event.preventDefault ()
źródło
.live()
metody, to nie zadziała. Będziesz musiał użyćreturn false;
samego siebie..on()
metody jQuery (funkcja live jest teraz przestarzała). Nie mogłem zrozumieć, dlaczego return false nie działa.Użyj metody stopPropagation:
źródło
Nie zapomnij o IE:
źródło
Jak wspomnieli inni, spróbuj
stopPropagation()
.Do wypróbowania jest drugi moduł obsługi:
event.cancelBubble = true;
jest to moduł obsługi specyficzny dla IE, ale jest obsługiwany przynajmniej w FF. Naprawdę niewiele o nim wiem, bo sam go nie użyłem, ale może warto spróbować, jeśli wszystko inne zawiedzie.źródło
To doskonały przykład zrozumienia koncepcji propagacji zdarzeń. W oparciu o powyższe odpowiedzi końcowy kod będzie wyglądał jak wspomniano poniżej. Gdy użytkownik kliknie pole wyboru, propagacja zdarzeń do elementu nadrzędnego „nagłówek” zostanie zatrzymana
event.stopPropagation();
.źródło
Podczas korzystania z jQuery nie trzeba osobno wywoływać funkcji zatrzymania.
Możesz po prostu wrócić
false
w module obsługi zdarzeńTo zatrzyma wydarzenie i anuluje propagację.
Zobacz także event.preventDefault () vs. return false
Z dokumentów jQuery:
źródło
Kredyt dla @mehras kodu. Właśnie stworzyłem fragment kodu, aby to zademonstrować, ponieważ myślałem, że będzie to mile widziane i chciałem wymówki, by wypróbować tę funkcję.
źródło
W angularjs powinno to działać:
źródło