1150 votes

Qu'est-ce que le bullage et la capture d'événements ?

Quelle est la différence entre le bouillonnement et la capture d'événements ? Quand faut-il utiliser le bullage ou la capture ?

3 votes

Je vous recommande ce lien utile : javascript.info/bubbling-and-capturing

0 votes

@CommunityAns : ce site est excellent, mais ce sujet, en particulier, est décrit de manière un peu confuse.

8voto

Kondal Points 1158

Bubbling

  Event propagate to the upto root element is **BUBBLING**.

Capturer

  Event propagate from body(root) element to eventTriggered Element is **CAPTURING**.

5voto

vitoboski Points 31

DOM Events décrit 3 phases de propagation des événements : Phase de capture - l'événement descend jusqu'à l'élément. Phase cible - l'événement a atteint l'élément cible. Phase de bouillonnement - l'événement bouillonne à partir de l'élément.

enter image description here

0voto

horcrux Points 2543

Comme d'autres l'ont dit, le bullage et la capture décrivent dans quel ordre certains éléments imbriqués reçoivent un événement donné.

Je voulais souligner que pour le le plus intime peut sembler étrange. En effet, dans ce cas, l'élément commander dans lequel les écouteurs d'événements sont ajoutés importe .

Dans l'exemple suivant, la capture de div2 sera exécuté d'abord que le bullage ; alors que le bullage pour les div4 sera exécuté en premier avant de capturer.

function addClickListener (msg, num, type) {
  document.querySelector("#div" + num)
    .addEventListener("click", () => alert(msg + num), type);
}
bubble  = (num) => addClickListener("bubble ", num, false);
capture = (num) => addClickListener("capture ", num, true);

// first capture then bubble
capture(1);
capture(2);
bubble(2);
bubble(1);

// try reverse order
bubble(3);
bubble(4);
capture(4);
capture(3);

#div1, #div2, #div3, #div4 {
  border: solid 1px;
  padding: 3px;
  margin: 3px;
}

<div id="div1">
  div 1
  <div id="div2">
    div 2
  </div>
</div>
<div id="div3">
  div 3
  <div id="div4">
    div 4
  </div>
</div>

0 votes

L'ordre d'ajout des récepteurs d'événements n'a pas d'importance Essayez votre propre exemple si vous n'êtes toujours pas sûr.

0 votes

@sasidhar Mon exemple est explicite. Maintenant si vous cliquez sur le div #4 vous obtenez " capture 3, bulle 4, capture 4, bulle 3 ". Si vous inversez l'ordre d'affirmation capture(3); capture(4); bubble(4); bubble(3); puis cliquez à nouveau sur la div #4, vous obtiendrez à la place " capture 3, capture 4, bulle 4, bulle 3 ". C'est un fait, même si je ne serais pas capable de l'expliquer.

0 votes

J'ai essayé votre exemple dans Edge et chrome, quel que soit l'ordre le résultat est toujours capture(3); capture(4); bubble(4); bubble(3)'

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X