用jQuery模拟按键


79

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

<a id="clickforspace" href="#">Click Here</a>

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

像这样,我假设:

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

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


2
可能会回答您的问题。
themis

我很好奇-尝试click用空格键替换时,您实际上是否希望浏览器在页面上向下滚动?在链接上按空格键通常与按向下翻页键具有相同的效果。
乔尔·普拉

Answers:


15

jQuery的keypress事件旨在完成这种工作。您可以通过将字符串“ keypress”传递给.trigger()来触发事件。但是,更具体地说,您实际上也可以传递jQuery.Event对象(将类型指定为“ keypress”),并提供所需的任何属性,例如,键码为空格键。

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

阅读以上文档以了解更多详细信息。


54
当然,请阅读文档,但是发布者可能已经知道这一点。jQuery事件文档有点不透明。安德鲁·卡尔弗(Andrew Culver)给出了直接答案,并提供了更多信息的参考。
罗伊·勒班

142

我相信这是您要寻找的:

var press = jQuery.Event("keypress");
press.ctrlKey = false;
press.which = 40;
$("whatever").trigger(press);

这里


17
例如,如果与输入控件一起使用,则不会产生任何实际的文本。
Alex Burtsev

5
@AlexBurtsev-你是对的,这是因为这只会触发事件处理程序,就像按下了特定键一样,但实际上并没有像按下键盘上的键时那样实际按下该键(可能是由于安全原因)
BornToCode

6
您将“ $”和“ jQuery”混合在一起是有原因的吗?
丹尼·安德鲁斯

4
您写的内容不适用于Chrome上的jQuery 2.2.3。:(但这确实:$("whatever").trigger($.Event("keydown", {keyCode: 40}))
Jonathan Benn

1
在乔纳森·本恩(Jonathan Benn)的方法的基础上,您还可以使用相同的技术来发送密钥而不是发送密钥代码(因为密钥代码被标记为已弃用)。例如:$(“ whatever”)。trigger($。Event(“ keyup”,{key:“ Enter”})))-以及显示的不同键盘事件(可选)。
艾伦·


12

您可以尝试使用此SendKeys jQuery插件:

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

$(element).sendkeys(string)在contenteditable = true的输入,文本区域或其他元素的插入点处插入字符串。如果该插入点当前不在元素中,则它会记住上次调用sendkeys时该插入点在哪里(如果该插入点从未在元素中,则将附加到末尾)。


您不需要jQuery来使用它,只需获取以下bililiteRange库即可使用相同的功能:github.com/dwachss/bililiteRange(实际上,jQuery插件只是围绕这个不可思议的库的一个薄包装,它独立存在)。
fiatjaf

5

这有效:

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

1
[var event = jQuery.Event('keypress'); event.which = 13; event.keyCode = 13; jQuery(this).trigger(event);]试试这个
Anoop PS

我需要点击输入对话框,所以与片段在这里,我换成#myEl ..谢谢
基因博
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.