好的,你是对的 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);
将给出您期望的输出。但是,它实际上并没有将值写入输入框中。当然,您可以伪造它并在那里添加文本,我不确定这是否是事件工作方式的限制,或者代码是否有问题。当然,对于测试,这可能就是您所需要的。
这是小提琴,也许其他人可以做出最后的跳跃。