如何模拟"有机"在javascript或JQuery中按键?

时间:2018-01-01 19:42:58

标签: javascript jquery events keypress

我已经尝试了好几天了。我已阅读了大量其他类似的问题,但没有任何帮助我。我想要做的是模拟确切的事件,例如用户可以制作的有机按键到文本输入字段。因此,它会设置"值"对新值的输入,与真正的按键完全一样。 它至少需要在1个浏览器上工作,无论是Chrome,Mozzila还是IE,它都无所谓。 我需要在输入中逐个字母地键入,但如果它适用于1个字母,那么它肯定适用于其中几个。

请注意:它无法设置输入值。只有人工按键事件可以帮助我。

2 个答案:

答案 0 :(得分:1)

您可以使用应用程序与浏览器进行交互或控制。使用像http://www.seleniumhq.org/这样的库可以提供帮助。

这是从Definitive way to trigger keypress events with jQuery

触发按键事件的代码
var e = jQuery.Event("keydown");
e.which = 50; // # Some key code value
$("input").trigger(e);

你确定设定值对你不起作用吗?如果将值设置为它的值加上新的char,该怎么办?这里包含一个可运行的示例。



function typeLetter( letter ) {
    $( '#input' ).val( $( '#input' ).val() + letter );
}

typeLetter( 'a' );
setTimeout( function() { typeLetter( 'b' ); }, 500 );
setTimeout( function() { typeLetter( 'c' ); }, 1000 );
setTimeout( function() { typeLetter( 'd' ); }, 1500 );
setTimeout( function() { typeLetter( 'e' ); }, 2000 );
setTimeout( function() { typeLetter( 'f' ); }, 2500 );
setTimeout( function() { typeLetter( 'g' ); }, 3000 );

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input id="input" >
&#13;
&#13;
&#13;

答案 1 :(得分:0)

可以一次添加一个字符的值,并使用charCodeAt()为每个字符获取密钥代码,以传递给您随后触发的新事件

&#13;
&#13;
let str = 'a new value';
$('input').on('keypress', function(e) {
  console.log(e.type + ', which=' + e.which)
})

str.split('').forEach((s, i) => {
  (function(s, i) {

    const evt = jQuery.Event("keypress");
    evt.which = str.charCodeAt(i);
    
    setTimeout(function() {
      jQuery('input').val(function(_, oVal) {
        return oVal + s;
      }).trigger(evt);
    }, 200 * i) //long delay for demo purpose

  })(s, i)

})
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input>
&#13;
&#13;
&#13;

如果需要,删除val()调用,只触发事件