使用jQuery模拟按键操作

85

使用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
我很好奇 - 当您尝试用空格键替换“点击”时,您是否真的希望浏览器在页面上向下滚动?在链接上按空格键通常具有与按页面向下键相同的效果。 - Joel Purra
5个回答

143

我相信这就是你正在寻找的内容:

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

参考这里


19
如果与输入控件一起使用,这将不会生成任何实际文本。 - Alex Burtsev
5
@AlexBurtsev - 你说得对,这是因为这只会触发事件处理程序,就像按下特定的键一样,但实际上并不像在键盘上按下键那样(可能是出于安全原因)。 - BornToCode
7
你是否会把“$”和“jQuery”混合使用? - Danny Andrews
4
你写的内容在Chrome上的jQuery 2.2.3中对我无效 :( 但这个可以:$("whatever").trigger($.Event("keydown", {keyCode: 40})) - Jonathan Benn
2
在Jonathan Benn的方法基础上,您也可以使用相同的技术来发送密钥而不是发送键码(因为键码被标记为已弃用)。例如:$("whatever").trigger($.Event("keyup", {key: "Enter"})) ——并且可以选择,如所示,使用不同的键盘事件。 - Alan M.
@AlanM。我尝试了很多选项,但只有你的有效:$("whatever").trigger($.Event("keyup", {key: "Enter"}))。非常感谢你。 - Gail Foad

43

1
我不确定 which 是用来干什么的。在SAPUI5中,只有 keyCode 对我有效(使用jQuery 2.2.3在Chrome上)。 - Jonathan Benn

15

jQuery中的keypress事件旨在执行此类工作。您可以通过向.trigger()传递字符串"keypress"来触发该事件。但是,为了更加具体,您实际上可以传递一个jQuery.Event对象(将类型指定为"keypress"),并提供任何属性,例如键码为空格键。

点击此处查看更多详细信息。


58
当然,请阅读文档,但是发帖者可能已经知道了。jQuery事件文档有点难以理解。安德鲁·卡尔弗给出了直接的答案,并提供了更多信息的参考。 - Roy Leban

13

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

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

$(element).sendkeys(string)将字符串插入到具有contenteditable=true的输入框、文本区域或其他元素中的插入点。如果插入点不在该元素中,则会记住上次调用sendkeys时的插入点位置(如果插入点从未出现在该元素中,则追加到末尾)。


你不需要使用jQuery来实现这个功能,只需获取bililiteRange库即可:https://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 P S
我需要在对话框中点击“Enter”,所以使用这里的代码片段,我将* this 替换为#myEl*。谢谢 - Gene Bo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接