【发布时间】:2016-11-10 17:07:00
【问题描述】:
我正在尝试在单元测试 (angular2/TypeScript) 中模拟 keydown 事件。我并不总是有可用的 DebugElement,所以我试图在本机元素上发出事件。 我遇到的问题是如何在创建键盘事件时定义 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
【问题讨论】:
-
你能解释一下你到底想做什么吗?
-
似乎在fiddle 中工作,带有一个实际元素,你确定
elm包含一个带有捕获调度事件的事件处理程序的元素吗? -
是的,我有一个处理键盘输入的组件。我正在听 keyDown 并基于 keyCode 做例如滚动。不总是使用 Angular 的 DebugElement.triggerEventHandler 的原因是,一旦您以编程方式修改 DOM,DebugElement 似乎与 nativeElements 不同步。出于这个原因,我想在本机元素上调度事件 - 在我的单元测试中。
-
jsfiddle.net/5p0abvzq/2 是的,它适用于密钥,但不适用于我想要弄清楚的 keyCode
-
啊,有人将我指向 mdn 链接 developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keyCode 并明确指出 keyCode 已被弃用,不应使用。相反,应该使用“代码”。我将更改我的实现以使用代码而不是 keyCode
标签: javascript angular