javascript - 如何在焦点按钮上模拟“Space”或“Enter”键?
问题描述
在焦点按钮上,当用户点击“Space”或“Enter”键时,浏览器将在这些键盘事件之上合成一个点击事件。
我试图模拟 keydown,在焦点按钮上键入“Space”键,但找不到让浏览器合成点击事件的方法。
document.activeElement.dispatchEvent(new KeyboardEvent('keydown',{which: 32, keyCode: 32, key: ' ', code: 'Space'}));
document.activeElement.dispatchEvent(new KeyboardEvent('keyup',{which: 32, keyCode: 32, key: ' ', code: 'Space'}));
这是我到目前为止得到的https://jsfiddle.net/s21f9pg7/
const btn = document.querySelector('#btn');
btn.onclick = function(e) {
console.log('click', e.type);
}
btn.onkeydown = function(e) {
console.log('keydown', e.type);
}
btn.onkeypress = function(e) {
console.log('keypress', e.type);
}
btn.onkeyup = function(e) {
console.log('keyup', e.type);
}
setTimeout(() => {
btn.focus();
document.activeElement.dispatchEvent(new KeyboardEvent('keydown', {
which: 32,
keyCode: 32,
key: ' ',
code: 'Space'
}));
/* document.activeElement.dispatchEvent(new KeyboardEvent('keypress',{which: 32, keyCode: 32, key: ' ', code: 'Space'})); */
setTimeout(() => {
document.activeElement.dispatchEvent(new KeyboardEvent('keyup', {
which: 32,
keyCode: 32,
key: ' ',
code: 'Space'
}));
}, 200);
}, 200)
<button id="btn">click</button>
此代码段在焦点按钮上发出 keydown 和 keyup,没有触发点击事件。 但是,如果您手动按空格键,则会有一个单击事件以及键盘事件。
我正在尝试找到一种对焦点按钮进行单元测试的方法。感谢帮助!
解决方案
推荐阅读
- javascript - 尝试创建一个 Javascript Tic Tac Toe
- qt - QQmlApplicationEngine 加载组件失败
- flutter - 使用 Flutter sqflite 返回单个字符串
- mysql - 如何创建一个表,其中包含一堆没有合并的其他表?
- c++ - 如何解决这个错误:Public 没有命名类型?
- c# - 如何在 protobuf-net.grpc 的消息中使用 IAsyncEnumerable?
- single-page-application - 使用 MSAL 进行 SPA 的多个用户会话
- swiftui - 在 ObservableObject 中引用 EnvironmentObject
- azure-ad-b2c - 有没有办法根据查询参数跳过编排步骤?
- angular - 如何在数据表中按日期排序,Angular Material