我目前做的鼠标点击事件处理我的D3可视化:d3.js的“单击”事件处理运行功能,无需点击事件
fooCircle.on("click",fooFunction("barParameter"));
我的问题是,该功能,而无需我跑了点击元素。我知道这是因为我在函数中放置了打印语句。
有趣的是,当我改变了功能,不是一个函数,它在任何参数,函数的行为有它应该,这意味着,当我点击相应的元素上它就会跑:
fooCircle.on("click",fooFunction);
我目前做的鼠标点击事件处理我的D3可视化:d3.js的“单击”事件处理运行功能,无需点击事件
fooCircle.on("click",fooFunction("barParameter"));
我的问题是,该功能,而无需我跑了点击元素。我知道这是因为我在函数中放置了打印语句。
有趣的是,当我改变了功能,不是一个函数,它在任何参数,函数的行为有它应该,这意味着,当我点击相应的元素上它就会跑:
fooCircle.on("click",fooFunction);
是,因为你在这个地方叫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在点击时调用处理程序时会提供哪些参数?
有人帮我解决了这个问题。解决的办法是做:
fooCircle.on("click", function() {fooFunction("barParameter"); });
这样,一个函数传递到功能上,而不是一个函数的结果。
我想我可以用d代替“barParameter”,如果我通过使用基准,数据或输入函数给元素提供必要的信息。目前在我的D3代码中,有问题的元素没有上述信息。无论哪种方式都很好。这取决于人们如何认为代码可读性更清晰。 –
@meetamit你的答案提供了有用的信息。我也有同样的问题。如果我采用相同的代码片段,是的,我需要将某个变量传递给'fooFunction'。我怎样才能做到这一点? – RAS
@RAS我认为tmnt-rafael的回答如下,解答你问的问题。如果你想更有趣,你可以阅读[部分应用功能](http://raganwald.com/2013/03/07/currying-and-partial-application.html)。 – meetamit