javascript - 尝试在 React 中调度按键事件
问题描述
我有一个带有输入元素的组件,我想在该输入元素上触发一个“tab”按键事件,以便在发生一组逻辑时跳转到下一个输入元素。
我在第一个输入元素上有一个引用,我试图触发 keypress 事件,如下所示:
useEffect(() => {
if (ref.current) {
ref.current.focus();
setTimeout(() => {
ref.current.dispatchEvent(
new KeyboardEvent("keypress", { key: "Tab" })
);
}, 3000);
}
});
首先,我确保使用 选择第一个输入元素.focus()
,然后在 3 秒后触发按 Tab 键,希望看到焦点移到下一个字段,但它似乎不起作用。
这似乎是一个奇怪的例子,但这只是一个原型。我实际上打算做的是在我提交第一个输入字段时触发一些代码,这将获取一些带有其他输入字段的行,一旦呈现,我需要触发“tab”键。我想避免将 refs 附加到这些动态加载的输入字段,因为我觉得它会增加很多开销来跟踪 refs 并将它们传递下来,而我所需要的只是利用 tab 顺序并模拟按键以 tab 到加载后的第一个动态加载项。我可以将单个引用添加到您需要提交以填充动态字段的字段。
我注意到一些在线.dispatchEvent()
直接在 ref 对象上调用的示例,但是如果我尝试得到一个错误,告诉我该函数不存在,所以我current
改为在 prop 上调用它。不确定这是否有任何相关性。
这是一个原型的链接,上面的代码来自:https ://codesandbox.io/s/wizardly-hopper-vrh4w?file=/src/App.js:149-441
解决方案
根据我在评论中得到的答案,您似乎无法通过模拟击键来触发本机浏览器行为(作为安全功能)(页面下方有关于 2/3 的注释):https ://developer.mozilla.org/en -US/docs/Web/API/KeyboardEvent
推荐阅读
- flutter - Flutter:如何为自定义 appbar 定义 SafeArea?
- javascript - React 元素通过 key 属性重新渲染
- r - 无法在 R 中执行的记事本中覆盖数据的问题
- javascript - 道具数据到子组件
- vb.net - 无法安装 VB.NET 应用程序 - 必须在 GAC 中安装 BouncyCastle.Crypto
- svelte - 苗条中的颜色组件
- apache-camel - 如何使用 Apache Camel 保留父跨度以进行聚合?
- api - CKAN - 为什么我只得到 Count 的前 10 个结果
- reactjs - 如何使用 React Hooks 将具有构造函数的类转换为功能组件?
- c# - 如何使用 C# 个性化选择查询