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

时间:2012-11-20 23:28:27

标签: javascript d3.js

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

fooCircle.on("click",fooFunction("barParameter"));

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

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

fooCircle.on("click",fooFunction);

2 个答案:

答案 0 :(得分:8)

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

fooCircle.on("click", function () {fooFunction("barParameter"); });

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

答案 1 :(得分:6)

是的,因为您在订阅点击处理程序的地方呼叫fooFunction

fooCircle.on("click",fooFunction("barParameter"));// Calls fooFunction with param "barParameter"

此时,您会看到您的console.log,因为您刚刚调用了该函数。

此外,我假设你的fooFunction没有返回任何内容,这实质上意味着它返回undefined。那么订阅基本上就变成了:

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

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

问题仍然存在,"barParameter"有什么意义?您是否需要将其他参数传递到fooFunction - 除了di以外,d3会在点击时调用处理程序时提供这些参数?