2012-12-20 7 views
43

że masz jakiś kod jak poniżej:Child Element kliknij zdarzenie wywoła zdarzenie rodzic kliknij

<html> 
<head> 
</head> 
<body> 
    <div id="parentDiv" onclick="alert('parentDiv');"> 
     <div id="childDiv" onclick="alert('childDiv');"> 
     </div> 
    </div> 
</body> 
</html>​ 

nie chcę, aby wyzwolić zdarzenie parentDiv kliknij po kliknięciu na childDiv Jak mogę to zrobić ?

Updated

także, jaka jest kolejność realizacji tych dwóch wydarzenia?

+3

nazywa się to zdarzenie propagacji, dobry punkt, aby rozpocząć: - http: // stackoverflow.com/questions/4616694/what-is-event-bubbling-and-capturing – Pranav

Odpowiedz

49

Trzeba użyć event.stopPropagation()

Live Demo

$('#parentDiv').click(function(event){ 
    event.stopPropagation(); 
    alert(event.target.id); 
});​ 

event.stopPropagation()

Opis: Zapobiega zdarzenie od propagacji górę drzewa DOM, uniemożliwiając jakiekolwiek teleskopowe macierzyste od powiadomienia zdarzenia.

+4

jeśli masz 2 oddzielne procedury obsługi dla zdarzeń nadrzędnych i podrzędnych kliknij i chcesz wywołać tylko procedurę obsługi dziecka przez zdarzenie click na dziecku, masz wywołanie metody event.stopPropagation() na pliku childDiv, a nie na parentDiv –

12

bez jQuery: DEMO

<div id="parentDiv" onclick="alert('parentDiv');"> 
    <div id="childDiv" onclick="alert('childDiv');event.cancelBubble=true;"> 
    AAA 
    </div> 
</div> 
6

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

Możesz użyć metody event.isPropagationStopped(), aby sprawdzić, czy ta metoda została kiedykolwiek wywołana (w tym obiekcie zdarzenia).

Składnia:

Oto prosta składnia, aby skorzystać z tej metody:

event.stopPropagation() 

Przykład:

$("div").click(function(event) { 
    alert("This is : " + $(this).prop('id')); 

    // Comment the following to see the difference 
    event.stopPropagation(); 
});​ 
3

Kliknij wydarzenie Bubbles, teraz, co należy rozumieć przez bulgotanie, dobrym punktem do rozpoczęcia jest here. możesz użyć event.stopPropagation(), jeśli nie chcesz, aby to wydarzenie było dalej propagowane.

Również dobry link, aby zapoznać się na MDN

3

I w obliczu tego samego problemu i rozwiązać go za pomocą tej metody. html:

<div id="parentDiv"> 
    <div id="childDiv"> 
    AAA 
    </div> 
    BBBB 
</div> 

JS:

$(document).ready(function(){ 
$("#parentDiv").click(function(e){ 
    if(e.target.id=="childDiv"){ 
    childEvent(); 
    } else { 
    parentEvent(); 
    } 
}); 
}); 

function childEvent(){ 
    alert("child event"); 
} 

function parentEvent(){ 
    alert("paren event"); 
} 
Powiązane problemy