8

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

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

我的问题是无需单击元素即可运行该功能。我知道这一点是因为我在函数中放置了打印语句。

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

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

2 回答 2

10

有人帮我解决了这个问题。解决办法是:

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

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

于 2012-11-20T23:46:55.347 回答
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除了d3 在单击时调用处理程序时将提供哪些参数?di

于 2012-11-20T23:43:14.800 回答