Si vous êtes déjà sous D3 v4 vous pouvez utiliser selection.dispatch()
qui a été spécialement conçu pour faire exactement ce que vous recherchez :
_#_ sélection . expédition ( type [, paramètres ]) <>
Les dépêches d'un événement personnalisé de l'article spécifié type à chaque élément sélectionné, dans l'ordre.
Ceci a été inclus dans la v4 à la suite du problème "Possibilité de déclencher manuellement les gestionnaires d'événements. #100" .
En outre, la méthode vous permettra de dispatcher des événements de même type à tous les éléments contenus dans la sélection. L'implémentation de cette méthode ressemble à l'approche adoptée par les autres répondants en mettant event.dispatch()
à utiliser, mais vous facilitera quelque peu la vie. Le snippet suivant possède un écouteur pour chaque cercle individuel, qui peut être déclenché par le bouton en même temps.
var circles = d3.select("svg").selectAll("circle")
.data(d3.range(5))
.enter().append("circle")
.attr("cx", function(d, i) { return 60 * i + 20; })
.attr("cy", "30")
.attr("r", "20").attr("fill", "blue")
.on("mouseleave",function(){
d3.select(this)
.attr("fill", "red")
.transition().duration(1000)
.attr("fill", "blue");
});
d3.select("#btn")
.on("click", function() {
circles.dispatch("mouseleave");
});
<script src="https://d3js.org/d3.v4.js"></script>
<svg width="400" height="70"></svg>
<button id="btn">Dispatch mouseleave to all circles</button>