javascript - 如何使用特定的 keyCode 创建 KeyboardEvent

标签 javascript angular

我正在尝试在单元测试 (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/

相关文章:

javascript - 在服务器端进行passport js本地用户身份验证后,如何在客户端使用cookie来显示用户信息?

javascript - 帐单地址与送货地址相同 jQuery

javascript - 无法在本地环境中从RollBar的最小化格式转换Angular v9的JavaScript错误堆栈跟踪

swift - 将信息从 Angular4 (WKWebView) 传递到 Swift

ecmascript-6 - Angular 2 : No Directive annotation found on MyComponent

angular - 如何在 Angular 中处理来自 @input 的数据?

javascript - Chrome 扩展突出显示文本选择 chrome.tabs

Javascript Canvas 选择器

javascript - 将用于提交按钮的 HTML 转换为链接 HTML?

angularjs - 在 Angular 混合应用程序的降级组件中无法识别驼峰参数