我目前在尝试为foreignObject使用 vanilla JS 呈现的某些s添加单击事件侦听器时遇到一些问题。
当我在点击功能上使用内置的 d3 时,它可以工作,但我更愿意使用 javascript 代码完成它。
但是,该函数永远不会为这些元素触发,我不明白为什么。
代码示例不完整,但应该突出显示我正在尝试做的事情。
var nodes = g.selectAll("foreignObject")
.data(response.nodes)
.enter()
.append("foreignObject")
.attr("x", function(d) {
return d.x - nodeWidth / 2;
})
.attr("y", function(d) {
return d.y - nodeHeight / 2;
})
.attr("width", nodeWidth)
.attr("height", nodeHeight)
.append("xhtml:div")
.attr("class", "outer")
.html(function(d) {
var nodeHtml = createNodeElement(d);
return nodeHtml.outerHTML;
})
// If I append the img like this, it works, but ends up in the wrong "element scope"
.append("img")
.attr("class", "optionsImg")
.attr("src","/images/options-squares.svg")
.on("click", function(d) {
currentTooltipObject = d;
renderTooltipDiv();
});
function createNodeElement(d) {
let nodeElement = document.createElement("div");
nodeElement.className = "nodeElement";
let nodeOptionsImg = document.createElement("img");
nodeOptionsImg.className = "nodeOptionsImg";
nodeOptionsImg.src = "/images/options-squares.svg";
nodeOptionsImg.addEventListener("click", function() {
console.log("Clicked on optionsImg for this object: "+d);
});
nodeElement.appendChild(nodeOptionsImg);
return nodeElement;
}
慕仙森
慕斯709654
相关分类