我有一個美國所有縣的SVG渲染。每個路徑上綁定了四個事件:D3事件 - 如何讓按鈕點擊d3元素?
click : opens up tooltip graphic with three buttons
dblclick : executes zoom effect
mouseover : shows tooltip with county/state data, changes fill
mouseout : returns fill to original
我的問題是,我想一個click事件區分爲其打開了按鈕提示的地圖,那裏面提示的按鈕。
我通過
thisObj._tooltip = d3.select("body")
.append("div")
.attr("class", "tooltip")
.style("opacity", 0);
創建工具提示和地圖創建通過
d3.json("/static/js/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;
})
.style("fill", "gray")
.style("stroke", "black")
.style("stroke-width", "0.5px")
.on("click", mapClick)
.on("dblclick", mapZoom)
.on("mouseover", mapMouseOver)
.on("mouseout", mapMouseOut);
});
我mapClick處理器是
var mapClick = function(d, i){
if (thisObj._tooltipOpen){
if ($(".button").is(":checked")){
console.log($(this).attr("id") + " was clicked");
} else {
console.log("Close tooltip click recorded");
thisObj._tooltip.transition()
.duration(500)
.style("opacity", 0);
thisObj._tooltipOpen = false;
mapMouseOut(d);
}
} else {
console.log("Open tooltip click recorded");
//tooltip template in html, want to handle a button click on these buttons
var template = "<div id = 'tooltip_template'>" +
"<div class = 'county_data'>" + d.name + ", " + d.properties.StateCode + "</div>" +
"<button id = 'add_prospective_market' class = 'button'>Prospective Market</button>" +
"<button id = 'add_market' class = 'button'>Market County</button>" +
"<button id = 'remove_market' class = 'button'>Remove Market</button></div>";
thisObj._tooltip.html(template)
.style("left", (d3.event.pageX) + "px")
.style("top", (d3.event.pageY + "px"));
$(".button").button();
thisObj._tooltip.transition()
.duration(1000)
.style("opacity", .8);
thisObj._tooltipOpen = true;
}
}
我必須通過
實例化一個按鈕處理程序$("#add_market").on("click", function(){
console.log("Add Market button clicked");
}
但它從來沒有激活,我得到的唯一日誌記錄是工具提示打開/關閉通知。鑑於此代碼,我如何修改點擊處理程序來區分按鈕點擊和非按鈕點擊?
你是否忽視了工具提示'div'中的指針事件? –
@LarsKotthoff,它是你和reblace建議的結合。我更改了指針事件設置,並將按鈕事件綁定到每個單擊事件上的工具提示。 – Jason