如何通过 keydown 事件在输入中添加文本

How can I add text in a input through a keydown event

我在 Angular7 项目中工作,我想编写测试来模拟用户输入的数据。为此,我想触发一些事件来填充要测试的输入。
示例:我想在输入中输入“12.50”,所以我可能应该发送 5 个事件:"1""2"".""5""0"

我知道我可以更新元素值,但我真的想检查 keydown 的行为(某些字符是不允许的,例如字母)。
我检查了很多示例和问题,但其中 none 对我有用。 JavaScript有没有可能做这种思考?

您可以使用 KeyboardEvent 以编程方式创建一个 keydown 事件,并从您的 <input> 元素发送它。

虽然这会触发在您的 <input> 元素上设置的任何 keydown 处理程序,但它 不会 具有更新的效果<input> 的值与真正的 keydown 一样。

const txt = document.querySelector('#txt');

txt.addEventListener('keydown', ev => console.log(`key=${ev.key}`));

const btn = document.querySelector('#btn');
btn.addEventListener('click', () => {
  txt.dispatchEvent(new KeyboardEvent('keydown', {key: '1'}));
  txt.dispatchEvent(new KeyboardEvent('keydown', {key: '2'}));
  txt.dispatchEvent(new KeyboardEvent('keydown', {key: '.'}));
  txt.dispatchEvent(new KeyboardEvent('keydown', {key: '5'}));
  txt.dispatchEvent(new KeyboardEvent('keydown', {key: '0'}));
});
<input id="txt"/>
<button id="btn">Dispatch "12.50"</button>