我目前正在为我的d3可视化进行鼠标点击事件处理:
fooCircle.on("click",fooFunction("barParameter"));
我的问题是该函数运行时没有必须单击该元素。我知道这是因为我把print语句放在函数中。
有趣的是,当我将函数更改为不是接受任何参数的函数时,函数的行为应该是它应该的,这意味着当我单击相应的元素时它会运行:
fooCircle.on("click",fooFunction);
答案 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
- 除了d
和i
以外,d3会在点击时调用处理程序时提供这些参数?