【发布时间】:2022-11-28 09:41:48
【问题描述】:
我正在使用 Next.js 构建一个网站,目前我正在尝试让一个简单的函数在按下某个键时运行。我遇到的问题是 onKeyDown 事件没有像我预期的那样被触发。我的代码如下:
<main onKeyDown={e => console.log("Key pressed")}>
目前它被放置在“main”元素中,这是该组件的顶级根元素。 我也尝试过将 onKeyDown 事件放置在许多其他元素中,但没有成功。 我不确定是位置问题还是我不了解如何使用此事件。任何帮助,将不胜感激。
至于现在,我只是想让它在控制台中写一些东西,这样我就可以看到它触发了。我试过使用 onKeyPress 代替,以及为事件分配一个函数而不是 lambda 表达式,这应该没有什么区别。
【问题讨论】:
-
如果您试图捕获页面上的所有按键事件,您可能需要将事件侦听器放在
window或document上。除非你能以某种方式关注“主要”,否则我不确定它会捕获该事件类型。 -
@tarrball 好吧,我最初的方法是这样的:
globalThis.addEventListener("keydown", e => { // do stuff })但我很快发现这使得它从网站上的所有页面触发。但是,谢谢,我会看看我是否能得到类似的东西。 -
我通过简单地将 <main> 的 tabIndex 属性设置为 -1 来让它工作:
<main tabIndex={-1} onKeyDown={handleKeyDown}>将它传递给函数 handleKeyDown 是不相关的。
标签: javascript html reactjs next.js react-component