Я понял ответ. Основная проблема заключается в том, что D3 не имеет явной функции trigger
, как это делает jQuery. Однако вы можете имитировать его.
Скажем у вас есть путь D3, построенный с помощью
d3.json("us-counties.json", function(json){
thisObj._svg.selectAll("path")
.data(json.features)
.enter().append("path")
.attr("d", thisObj._path)
.attr("class", "states")
.attr("id", function(d){
return d.id; //<-- Sets the ID of this county to the path
})
.style("fill", "gray")
.style("stroke", "black")
.style("stroke-width", "0.5px")
.on("dblclick", mapZoom)
.on("mouseover", mapMouseOver)
.on("mouseout", mapMouseOut);
});
и обработчик событий курсора, находящегося, который изменяет цвета заливки и обводки
var mapMouseOver(d){
d3.selectAll($("#" + d.id))
.style("fill", "red")
.style("stroke", "blue");
}
Как правило, большинство учебников говорят использовать
d3.select(this)...
, но на самом деле использование значения также работает. Если у вас есть обработчик событий, который получает вам идентификатор узла, и запустить его с помощью
$("#someDropdownSelect").change(someEventHandler)
function someEventHandler(){
//get node ID value, sample
var key = $(this)
.children(":selected")
.val();
//trigger mouseover event handler
mapMouseOver({id : key});
}
выполнит событие курсора, находящиеся на основе выделенного ниспадающего
Это работает отлично. –