如何在javascript中合成按键

时间:2013-03-08 21:29:17

标签: javascript javascript-events keypress

我想在文本框中为一些输入过滤代码编写一些测试。对于大多数测试,我只需调用setValue并触发更改事件,这很容易。但是,在这种情况下,因为我想测试输入被过滤掉(或不是),我不能直接setValue()

我尝试调度keydown,keyup,keypress,textinput事件。 I can see that the handlers for them are being called, but the text doesn't actually show in the text box请注意,这仅适用于Firefox,我知道其他浏览器的代码看起来会有所不同。

function dispatch(target, eventType, charCode) {
   var evt = document.createEvent("KeyboardEvent");
   evt.initKeyEvent(
     eventType,
     true,
     true,
     window,
     false,
     false,
     false,
     false,
     charCode,
     0
   );
   target.dispatchEvent(evt);
}


var id = document.getElementById('id');
id.onkeydown = id.onkeyup = id.onkeypress = function() {console.log(arguments)}

dispatch(id, 'keydown', 65);
dispatch(id, 'keyup', 65);
dispatch(id, 'keypress', 65);
dispatch(id, 'textinput', 65);
// I can see the handlers were called but it doesn't display in the text box

我知道这有限制,因为我们不希望网络应用只是假装他们正在为用户行事。但是,这是用于测试我自己的应用程序,我可以使用特定的配置文件启动firefox并安装插件,如果我知道它会有帮助,甚至可以自己编写。

我所追求的是避免使用Selenium,我想让Java远离我的JS测试,因为它不仅速度慢,而且还必须在Java中重新实现很多DOM查询。

毕竟,问题是,是否有人知道如何让代码实际修改输入?调整设置,安装插件?

不回答我问题的问题列表

1 个答案:

答案 0 :(得分:1)

我刚刚发现以下代码至少在Chrome中有效。不要使用firefox或IE http://jsfiddle.net/D2s5T/14/

function dispatch(target, eventType, char) {
   var evt = document.createEvent("TextEvent");    
   evt.initTextEvent (eventType, true, true, window, char, 0, "en-US");
   target.focus();
   target.dispatchEvent(evt);
}
dispatch(el, "textInput", "a");