jquery(或纯 js)模拟按下回车键进行测试

IT技术 javascript jquery testing mocking
2021-02-02 10:13:45

模拟用户按“输入”的最佳方法是什么?$(element).keypress() 似乎不允许我传入实际按下的键。

这是用于单元测试。

2个回答

演示在这里

var e = jQuery.Event("keypress");
e.which = 13; //choose the one you want
e.keyCode = 13;
$("#theInputToTest").trigger(e);
@morgancodes,我想不是很容易,没有解释,但暗示较低。
2021-03-15 10:13:45
谢谢红方。这个解决方案对我来说从文档中并不明显 - api.jquery.com/trigger他们将他们的用法显示为 .trigger( eventType, extraParameters )。我应该能够根据文档弄清楚吗?这是官方支持的功能吗?
2021-03-22 10:13:45
@Luke Stanley,感谢 dig luke -“jQuery 规范了 .which 属性,因此您可以可靠地使用它来检索字符代码”。
2021-03-27 10:13:45
之前的测试代码不同,测试和设置是结合在一起的。jsfiddle.net/yB78c试试这个更好的测试,有和没有 keyCode - 你会看到错误。什么是挖?
2021-03-30 10:13:45
演示脚本很差。检查使用的密钥并验证它是预期的密钥,以完成。
2021-04-06 10:13:45

对于那些想在纯 javascript 中执行此操作的人,请查看:

使用标准键盘事件

正如乔评论的那样,KeyboardEvent现在是标准。

触发输入的相同示例(keyCode 13):

const ke = new KeyboardEvent('keydown', {
    bubbles: true, cancelable: true, keyCode: 13
});
document.body.dispatchEvent(ke);

您可以使用此页面帮助您找到正确的键盘事件。


过时的答案

您可以执行类似的操作(此处适用于 Firefox)

var ev = document.createEvent('KeyboardEvent');
// Send key '13' (= enter)
ev.initKeyEvent(
    'keydown', true, true, window, false, false, false, false, 13, 0);
document.body.dispatchEvent(ev);
看起来这个答案需要更新。KeyboardEvent 现在是标准的:developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/...(不推荐使用 initKeyEvent)
2021-03-19 10:13:45
你能回答这个问题吗? stackoverflow.com/questions/41137575/... 我想复制你的答案,但我想你会想自己回答。
2021-04-02 10:13:45