3

我正在为我的框架制作一个规范,该框架需要用shift密钥测试一个事件。所以我想务实地插入 a!就好像我按下了shift + 1.

我一直在使用 Syn 框架,但无法使其模拟SHIFT + 1. 根据文档,它应该是

Syn.type('[shift]1[shift-up]', 'textInput2'); 

但这不起作用。我希望有一个!角色, the event.shiftKeyto betrue和to be但我得到了 a而不是 a而不是。event.key331!event.key == 49

使用 Syn 或 vanilla javascript 怎么可能?

做了这个 jsFiddle来测试这个,检查控制台。

4

2 回答 2

3

如果您在此处查看 Syn 测试https://github.com/bitovi/syn/blob/c77ae2cbb19ff0a5d3ecd3f9968e15adad289a79/test/qunit/key_test.js

您可以看到他们通过执行“[shift]A[shift-up]”来模拟大写字母“A”。Syn 简单地创建一个事件并传递和设置值。它不模拟较低级别的键盘交互。

 Syn.type('[shift]![shift-up]', 'textInput2');
 // outputs 33 true 

设置超时将使它工作,不知道为什么,但确实如此:http: //jsfiddle.net/2zsNV/5/

于 2014-04-24T00:59:53.417 回答
2

好的,你是对的 Syn 没有正确地做到这一点,我可以猜到为什么 - 浏览器不能告诉你的键盘布局(见这里:用 javascript 检测键盘布局)所以它真的不能告诉你应该做什么获取 Shift+1,所以它只给你一个“1”。

你会假设

Syn.type('[shift]![shift-up]', 'textInput2'); 

会按预期工作,但那也不是......我认为这是 Syn 中的一个错误。

那么,你能用原始的 JavaScript 来做吗?我可以靠近。

显然很难让它跨浏览器工作,这让我陷入了尝试不同事物的困境。首先我看了这个问题:是否可以以编程方式模拟按键事件?但这在 chrome 中无法正常工作,然后我根据他们的文档尝试了各种事件和值的组合,但没有取得更大的成功。然后我发现了这个问题:在 Chrome 上触发一个键盘事件,这让我看到了这段代码

将该代码粘贴到 JS 中,然后使用以下命令调用它:

var e = crossBrowser_initKeyboardEvent("keypress", {"key": 1, "char": "!", shiftKey: true})
document.getElementById('textInput2').dispatchEvent(e);

将给出您期望的输出。但是,它实际上并没有将值写入输入框中。当然,您可以伪造它并在那里添加文本,我不确定这是否是事件工作方式的限制,或者代码是否有问题。当然,对于测试,这可能就是您所需要的。

这是小提琴,也许其他人可以做出最后的跳跃。

于 2014-04-18T07:57:57.347 回答