我目前正在为我的 d3 可视化进行鼠标单击事件处理:
fooCircle.on("click",fooFunction("barParameter"));
我的问题是无需单击元素即可运行该功能。我知道这一点是因为我在函数中放置了打印语句。
有趣的是,当我将函数更改为不接受任何参数的函数时,该函数的行为应该如此,这意味着当我单击适当的元素时它会运行:
fooCircle.on("click",fooFunction);
我目前正在为我的 d3 可视化进行鼠标单击事件处理:
fooCircle.on("click",fooFunction("barParameter"));
我的问题是无需单击元素即可运行该功能。我知道这一点是因为我在函数中放置了打印语句。
有趣的是,当我将函数更改为不接受任何参数的函数时,该函数的行为应该如此,这意味着当我单击适当的元素时它会运行:
fooCircle.on("click",fooFunction);
有人帮我解决了这个问题。解决办法是:
fooCircle.on("click", function () {fooFunction("barParameter"); });
这样,一个函数被传递给 on 函数,而不是函数的结果。
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 在单击时调用处理程序时将提供哪些参数?d
i