【发布时间】:2020-08-07 22:00:11
【问题描述】:
我有一个带有输入元素的组件,我想在该输入元素上触发一个“tab”按键事件,以便在发生特定逻辑集时跳转到下一个输入元素。
我在第一个输入元素上有一个引用,我正在尝试像这样触发按键事件:
useEffect(() => {
if (ref.current) {
ref.current.focus();
setTimeout(() => {
ref.current.dispatchEvent(
new KeyboardEvent("keypress", { key: "Tab" })
);
}, 3000);
}
});
首先我确保用.focus() 选择第一个输入元素,然后在 3 秒后触发按 Tab 键,希望看到焦点移动到下一个字段,但它似乎不起作用。
这似乎是一个奇怪的例子,但这只是一个原型。我实际上打算做的是在我提交第一个输入字段时触发一些代码,这将获取一些带有其他输入字段的行,一旦呈现,我需要触发“tab”键。我想避免将 ref 附加到这些动态加载的输入字段,因为我觉得它会增加很多开销来跟踪 ref 并将它们传递下来,而我所需要的只是利用 tab 顺序并模拟按键以 tab 到加载后的第一个动态加载项。我可以将单个引用添加到您需要提交以填充动态字段的字段。
我注意到一些在线示例直接在 ref 对象上调用 .dispatchEvent(),但是如果我尝试得到一个错误,告诉我该函数不存在,所以我在 current 属性上调用它。不确定这是否有任何相关性。
这是一个原型的链接,上面的代码来自:https://codesandbox.io/s/wizardly-hopper-vrh4w?file=/src/App.js:149-441
【问题讨论】:
-
看来这是不可能通过每个stackoverflow.com/questions/32428993/…的javascript DOM事件来完成的
-
不幸的是,您似乎是对的。请参阅有关手动触发事件不触发本机浏览器操作的说明:developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent
标签: javascript reactjs keyevent react-ref