使用jQuery模拟Keypress

Dod*_*nas 78 javascript keyboard jquery

使用jQuery,如何在单击链接时模拟(触发?)KeyPress?例如,当用户单击以下链接时:

<a id="clickforspace" href="#">Click Here</a>
Run Code Online (Sandbox Code Playgroud)

然后,通过单击链接,就好像他们按下键盘上的"空格键"一样.

这样的事情,我假设:

$("#clickforspace").click(function(e) { 
    e.preventDefault(); 
    //... Some type of code here to initiate "spacebar" //
                                      });
Run Code Online (Sandbox Code Playgroud)

关于如何实现这一点的任何想法?

小智 135

我相信这就是你要找的东西:

var press = jQuery.Event("keypress");
press.ctrlKey = false;
press.which = 40;
$("whatever").trigger(press);
Run Code Online (Sandbox Code Playgroud)

这里开始.

  • 如果与输入控件一起使用,这将不会产生任何实际文本. (16认同)
  • @AlexBurtsev - 你是对的,那是因为这只会触发事件处理程序,好像按下了特定的键,但实际上没有按键,就像在键盘上按下键时一样(可能由于安全原因) (5认同)
  • 是否有理由将'$'和'jQuery'混合在一起? (5认同)
  • 你在Chrome上的jQuery 2.2.3中写的不适合我.:(但这样做:`$("无论什么").触发器($.事件("keydown",{keyCode:40})) (4认同)
  • 基于 Jonathan Benn 的方法,您还可以使用相同的技术来发送密钥,而不是发送密钥代码(因为密钥代码被标记为已弃用)。例如: $("whatever").trigger($.Event("keyup", {key: "Enter"})) — 并且可选地,如图所示,使用不同的键盘事件。 (2认同)

Den*_*nov 36

另外一个选项:

$(el).trigger({type: 'keypress', which: 13, keyCode: 13});
Run Code Online (Sandbox Code Playgroud)

http://api.jquery.com/trigger/


Dmi*_*ten 15

来自jQuery的keypress事件意味着要做这种工作.您可以通过将字符串"keypress"传递给.trigger()来触发事件.但是更具体地说,您实际上可以传递jQuery.Event对象(将类型指定为"keypress")并提供您想要的任何属性,例如键代码是空格键.

http://docs.jquery.com/Events/trigger#eventdata

阅读上述文档以获取更多详细信息.

  • 当然,阅读文档,但海报可能已经知道了.jQuery事件文档有点不透明.Andrew Culver给出了直接答案,并提供了更多信息的参考. (49认同)

Rob*_*vey 12

你可以尝试这个SendKeys jQuery插件:

http://bililite.com/blog/2011/01/23/improved-sendkeys/

$(element).sendkeys(string)在输入,textarea或contenteditable = true的其他元素的插入点处插入字符串.如果插入点当前不在元素中,则会记住上次调用sendkeys时插入点的位置(如果插入点从不在元素中,则会附加到结尾).


Ano*_*P S 5

这有效:

var event = jQuery.Event('keypress');
event.which = 13; 
event.keyCode = 13; //keycode to trigger this for simulating enter
jQuery(this).trigger(event); 
Run Code Online (Sandbox Code Playgroud)