作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
虽然我已经很好地使用了 JQuery,但我还是 Javascript 新手。但我找不到更好的文档来执行此操作。仅当我按 Enter 键时才需要触发单击事件。所以我需要为这个场景编写测试用例。
function btnRepeatKeyDownEvent(e){
if (e.keyCode === 13) {
this.trigger('click', e);
}
}
到目前为止我已经找到了这个解决方案。
let keyboardEvent: KeyboardEvent = new KeyboardEvent('keypress', {'key': 'Enter'});
document.dispatchEvent(keyboardEvent);
但是上面的代码总是给出 keycode 值为 0。我更厌倦了寻找解决方案。根据 MDN,大多数功能已被弃用。我需要使这个测试用例在 chrome、firefox 和 IE11+ 中可用,但不适用于旧浏览器。请帮助我。
最佳答案
keyCode 和其他属性是只读的。因此,您可以利用 JavaScript 的 Object.defineProperties 函数来伪造它,该函数会覆盖值:
function makeKeyPressEvent(keyName, keyCode, charCode){
var event = new KeyboardEvent('keypress');
Object.defineProperties(event, {
charCode: {value: charCode},
keyCode: {value: keyCode},
keyIdentifier: {value: keyName},
which: {value: keyCode}
});
return event;
}
使用方法如下:
window.addEventListener('keypress', function(event){console.log('key pressed!', event.keyIdentifier, event.keyCode, event.charCode, event)}, true);
var enterKeyEvent = makeKeyPressEvent('Enter', 13, 13);
window.dispatchEvent(enterKeyEvent);
关于javascript - 如何在纯javascript中手动触发按键事件时设置键码值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37605601/
我是一名优秀的程序员,十分优秀!