2009-09-16 17 views
6

Ok, proste pytanie:Prevent javascript onclick na elemencie dziecka

<div onclick="javascript:manualToggle(this)"> 
    <span>Allowed to click</span> 
    <span>Not allowed to click</span> 
    <span>Allowed to click</span> 
</div> 

Bez replikacji manualToggle na do 2 przęseł, które są dopuszczone do kliknięcia, w jaki sposób można zapobiec „Nie wolno kliknij” przęsło z odpaleniem to zdarzenie onclick rodzica div po kliknięciu?

Odpowiedz

2

Musisz obsługi zdarzeń (to jest bardzo łatwe do zrobienia tego w coś jQuery), który łapie kliknięcia dla przęseł wewnątrz div i tylko pożary funkcję, jeśli na przykład , zakres ma/nie ma określonej klasy.

0

Możliwe rozwiązanie: dać rozpiętości identyfikatora i sprawdzić, czy kliknięte id może być kliknięcie w funkcji

zły pomysł: nie wiem, który rozpiętość kliknięciu ponieważ wywołać funkcję z listy div ...

1

z mootools można użyć metody stopPropagation:

$('myChild').addEvent('click', function(ev){ 
    ev.stopPropagation(); // this will prevent the event to bubble up, and fire the parent's click event. 
}); 

widzieć http://mootools.net/docs/core/Native/Event#Event:stopPropagation

patrz również to bardzo podobne pytanie: How can I stop an onclick event from firing for parent element when child is clicked?

+1

yay, downvote doskonale poprawny (i pracy) odpowiedź! – knittl

+1

Polecenie downLine dla biblioteki js, którą sugerujesz, tak jak phoenix, który sugeruje jQuery – Natrium

+0

używanie bibliotek jest najłatwiejszy (i najbardziej zgodny z przeglądarkami) sposób – knittl

16

Daj rozpiętości identyfikator Attach onclick zdarzenia do niego i używać

jQuery próbki

$("#spn2").click(function(event){ 
    event.stopPropagation(); 
}); 

event.stopPropagation(): zatrzymuje pęcherzyków zdarzenia do elementów nadrzędnych, uniemożliwiając jakiekolwiek obsługi macierzystych z powiadomienia zdarzenia.

+2

Czy głosowanie w dół na odpowiedź jQuery – rahul

+0

Poszedłem na coś podobnego, ale nie z stopPropagation. (Nie głosowałem na żadne pytanie w tej sprawie ...) – Paul

+1

Istnieje różnica między poprawną odpowiedzią a rozwiązaniem, które działało. Jest to właściwie poprawna odpowiedź na to pytanie. Dzięki! – jmilloy

6

Byłoby sensowne, aby korzystać z biblioteki, ale bez tego można spróbować (edycja z całej strony, aby sprawdzić):

<html><head></head> 
<body> 
<script type="text/javascript"><!-- 
function manualToggle(val) 
{ 
    alert(val.id); 
} 

--></script> 

<div id="test" onclick="manualToggle(this);"> 
    <span>Allowed to click</span> 
    <span onclick="event.cancelBubble=true;if (event.stopPropagation) event.stopPropagation();">Not allowed to click</span> 
    <span>Allowed to click</span> 
</div> 
</body> 
</html> 
+0

'wydarzenie'? 'e'? wydaje się, że czegoś brakuje. – knittl

+0

Thx, e nie działa. Przetestowałem je tylko w przeglądarce cancelBubble, zmieniłem je na event (którym jest window.event) i umieściłem tam kod testowy. Działa co najmniej w FF 3.5 i IE7 – Daff

Powiązane problemy