我正在尝试在单元测试 (angular2/TypeScript) 中模拟按键事件。我并不总是有可用的 DebugElement,所以我试图在 native 元素上发出事件。 我遇到的问题是如何在创建 KeyboardEvent 时定义 keyCode。 keyCode 未定义为 KeyboardEventInit 定义的一部分,并且在 KeyboardEvent 本身上它仅作为只读属性公开。
只是简单地添加一个 keyCode 属性(并将 obj 类型设置为 )也不起作用。
let elm = <HTMLElement>content.nativeElement;
let ev = new KeyboardEvent('keydown', {
code: '123',
//keyCode: 345,
key: 'a',
});
elm.dispatchEvent(ev);
有什么建议吗?
编辑: 根据 mdn 链接,keyCode 已弃用,不应使用,而应使用“代码”。 https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keyCode
最佳答案
我仍然认为这是 Typescript 方面的错误,因为初始化程序 LanguageEvent 有。在任何情况下,解决方法是使用 Object.define 设置 keyCode。
let arrowRight = new KeyboardEvent('keydown');
Object.defineProperty(arrowRight, 'keyCode', {
get : () => 39
});
console.log(arrowRight.keyCode, arrowRight.key, arrowRight.code);
无论 keyCode 已被弃用,这并不意味着初始化器不应该支持它。最有力的论据是 Internet Explorer 9 和 11 依赖于它并且它们不支持代码 https://caniuse.com/#search=event.code 或完全支持 key https://caniuse.com/#search=event.key 所以我认为 LanguageEvent 应该在其初始化程序中允许使用 keyCode。
let arrowRight = new KeyboardEvent('keydown', { keyCode: 39 });
关于javascript - 如何使用特定的 keyCode 创建 KeyboardEvent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40533292/