Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在我的节点上的onclick事件中调用两个JavaScript函数_Javascript_D3.js - Fatal编程技术网

如何在我的节点上的onclick事件中调用两个JavaScript函数

如何在我的节点上的onclick事件中调用两个JavaScript函数,javascript,d3.js,Javascript,D3.js,我已经创建了一个节点和边缘图。为此,我创建了一个onclick方法。当我点击一个节点时,我希望该节点的颜色改变,并且该节点的信息显示在我单独创建的框中。 改变颜色的函数被调用 function changeColorClick (e, d) 提供信息的函数称为: function showDetails(e,d) 现在的问题是如何在一个onclick中包含这两个函数?如果我执行单个函数,它就会工作。但是我如何执行这两种方法呢 当我同时运行两者时,会收到以下错误消息: Uncaught Typ

我已经创建了一个节点和边缘图。为此,我创建了一个onclick方法。当我点击一个节点时,我希望该节点的颜色改变,并且该节点的信息显示在我单独创建的框中。 改变颜色的函数被调用

function changeColorClick (e, d)
提供信息的函数称为:

function showDetails(e,d)
现在的问题是如何在一个onclick中包含这两个函数?如果我执行单个函数,它就会工作。但是我如何执行这两种方法呢

当我同时运行两者时,会收到以下错误消息:

Uncaught TypeError: node.getAttribute is not a function
    at new ClassList (d3.v6.js:1923)
    at classList (d3.v6.js:1918)
    at classedAdd (d3.v6.js:1947)
    at d3.v6.js:1958
    at Selection$1.selection_each [as each] (d3.v6.js:1781)
    at Selection$1.selection_classed [as classed] (d3.v6.js:1983)
    at onClickNode (index.html:179)
    at SVGCircleElement.<anonymous> (index.html:160)
    at SVGCircleElement.<anonymous> (d3.v6.js:2107)

您共享的代码中没有任何问题-它应该完全按照预期工作。根据前面的问题,我假设您有一个
d3。在生成错误的函数中选择(this)
,箭头函数有不同的
上下文-在本例中它不是节点。如果是这样,您可以尝试一个选项
.on(“click.foo”,showDetails)。on(“click.bar,onClickNode)
,如果您希望为同一事件使用两个单独的事件侦听器,并将节点作为
this
传递。但是没有看到是什么产生了错误(这两个函数中的某些东西),这只是一个有根据的猜测。在函数上
showDetails
im使用
d3.select(“#detail_框”)…
和在
onclickNode
im使用`d3.select(这个)..`and
svg。选择All..
@AndrewReid-thx它的工作原理。重复的问题可能会很有用,因为他们的答案比我在评论中提供的更清晰和更详细的信息——这两个问题的答案都是那些比我更精通D3的人的优秀答案。
  var node = svg.append("g")
      .attr("class", "nodes")
      .selectAll("circle")
      .data(graph.nodes)
      .enter()
      .attr("r", 5)
      .style('fill', 'red')
      .on("click", (e, d) => {
        showDetails(e, d);
        onClickNode(e, d);
      });