d3.js在"click"事件处理运行函数时没有单击事件

tmn*_*ael 6 javascript d3.js

我正在为我的d3可视化进行鼠标点击事件处理:

fooCircle.on("click",fooFunction("barParameter"));
Run Code Online (Sandbox Code Playgroud)

我的问题是该函数运行时没有我必须单击该元素.我知道这是因为我把print语句放在函数中.

有趣的是,当我将函数更改为不是接受任何参数的函数时,函数的行为应该是它应该的,这意味着当我单击相应的元素时它会运行:

fooCircle.on("click",fooFunction);
Run Code Online (Sandbox Code Playgroud)

tmn*_*ael 8

有人帮我解决了这个问题.解决方案是:

fooCircle.on("click", function () {fooFunction("barParameter"); });
Run Code Online (Sandbox Code Playgroud)

这样,函数被传递给on函数,而不是函数的结果.


mee*_*mit 6

是的,因为您在fooFunction订阅点击处理程序的地方打电话:

fooCircle.on("click",fooFunction("barParameter"));// Calls fooFunction with param "barParameter"
Run Code Online (Sandbox Code Playgroud)

那一刻,你看到你的console.log,因为你刚刚调用了这个函数.

此外,我假设你fooFunction没有返回任何东西,这实际上意味着它返回undefined.那么订阅基本上变成:

fooCircle.on("click", undefined);// Nothing will happen since there's no handler
Run Code Online (Sandbox Code Playgroud)

这就是为什么第二个代码片段应该正常工作的原因; 因为你为它提供了一个稍后调用的功能.

但问题仍然存在,意义"barParameter"何在?你有必要通过一些其他参数为fooFunction-比其他di当它调用上单击处理程序,其D3将提供?