Javascript d3:截获特定元素上的键控事件

Javascript d3:截获特定元素上的键控事件,javascript,d3.js,Javascript,D3.js,我想确定在特定D3元素上发生的按键事件。下面的代码片段正确地识别了鼠标在单个div上移动和全局按键事件,但到目前为止似乎没有触发仅在Chrome上测试的特定于div的按键处理程序。最简单的方法是什么: 确定光标位于哪个div/svg上,或 将密钥处理程序附加到特定的div/svg ? 谢谢 编辑 作为后续工作,我想我可以在mouseover处理程序中捕获div ID,并使用它在全局keydown事件中标识相应的div,但我很好奇是否有更优雅或更惯用的解决方案。*D'oh。您的编辑正好有这个解决方

我想确定在特定D3元素上发生的按键事件。下面的代码片段正确地识别了鼠标在单个div上移动和全局按键事件,但到目前为止似乎没有触发仅在Chrome上测试的特定于div的按键处理程序。最简单的方法是什么:

确定光标位于哪个div/svg上,或 将密钥处理程序附加到特定的div/svg ?

谢谢

编辑

作为后续工作,我想我可以在mouseover处理程序中捕获div ID,并使用它在全局keydown事件中标识相应的div,但我很好奇是否有更优雅或更惯用的解决方案。

*D'oh。您的编辑正好有这个解决方案。是的,这可能是最好的处理方法*

您可能需要使用mouseover处理程序跟踪当前关注的元素,然后使用页面侦听器将事件委托给该节点

大概是这样的:

var focused = null;
svg.append("rect").on("mouseover", function () { focused = this; })
然后在页面处理程序中:

d3.select("body").on("keydown", function () { d3.select(focused); /* then do something with it here */ });

您还可以使用d3.event.stopPropagation来防止事件冒泡到正文中。

您可以使用来获取元素d3.select并调用其上的函数。如果矩形上有文本标签,这可能会有点奇怪。elementFromPoint只抓取视图中最上面的元素。谢谢,我确实做了这样的事情。我会把这个打开一段时间,看看有没有人插话。别担心。感谢您的考虑:
d3.select("body").on("keydown", function () { d3.select(focused); /* then do something with it here */ });