为什么动态添加的 D3 节点上的单击事件没有触发?



我的代码通过用户动态添加一个节点来创建力定向图。

我的问题是添加节点后我的点击事件没有被触发:

//change the node's colour to blue when clicked
d3.select("svg").selectAll("g.node").on("click", function(OperationName) {
debugger;
OperationArray = JSON.parse(localStorage['dynamicNode']);
var rect = this.firstChild;
changeColour(rect);
document.getElementById('selectedOperation').value = OperationName;
document.getElementById('previousOperation').value = OperationArray[OperationName].inputQueue
document.getElementById('nextOperation').value = nextOperation;
});

如果我在添加节点后尝试在控制台中运行这段代码,请单击事件将被触发并且节点会改变颜色,但它本身在浏览器中不起作用。

据我了解,我应该在加载图形后运行我的点击事件,但我如何在这里做到这一点?我希望能够在添加节点后随时触发我的点击事件,以便以后可以向其添加更多操作。

工作演示:这里

如果您使用演示:

  1. 我从"选择操作"下拉列表中选择的操作得到 当我将上一个和下一个操作保留为"无"时添加。

  2. 添加第一个节点后,我添加其他节点,同时提及上一个节点并保留下一个节点 节点为"无"。

  3. 如果我想在中间添加一个节点,我会提到前面的两个 节点和下一个节点(如果存在)。

答案非常简单,我从这个答案中得到了这个想法 我只需要将这段代码粘贴到我的draw函数中,所有内容都在渲染,以便它再次绑定。

最新更新