我正在为我的d3可视化进行鼠标点击事件处理:
fooCircle.on("click",fooFunction("barParameter"));
Run Code Online (Sandbox Code Playgroud)
我的问题是该函数运行时没有我必须单击该元素.我知道这是因为我把print语句放在函数中.
有趣的是,当我将函数更改为不是接受任何参数的函数时,函数的行为应该是它应该的,这意味着当我单击相应的元素时它会运行:
fooCircle.on("click",fooFunction);
Run Code Online (Sandbox Code Playgroud)
有人帮我解决了这个问题.解决方案是:
fooCircle.on("click", function () {fooFunction("barParameter"); });
Run Code Online (Sandbox Code Playgroud)
这样,函数被传递给on函数,而不是函数的结果.
是的,因为您在fooFunction订阅点击处理程序的地方打电话:
fooCircle.on("click",fooFunction("barParameter"));// Calls fooFunction with param "barParameter"
Run Code Online (Sandbox Code Playgroud)
那一刻,你看到你的console.log,因为你刚刚调用了这个函数.
此外,我假设你fooFunction没有返回任何东西,这实际上意味着它返回undefined.那么订阅基本上变成:
fooCircle.on("click", undefined);// Nothing will happen since there's no handler
Run Code Online (Sandbox Code Playgroud)
这就是为什么第二个代码片段应该正常工作的原因; 因为你为它提供了一个稍后调用的功能.
但问题仍然存在,意义"barParameter"何在?你有必要通过一些其他参数为fooFunction-比其他d和i当它调用上单击处理程序,其D3将提供?
| 归档时间: |
|
| 查看次数: |
8134 次 |
| 最近记录: |