2009-09-23 155 views
68

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

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

然后,通过点击链接,这将是因为如果他们自己的键盘上按下“空格键”。

这样的事情,我假设:

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

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

+0

我很好奇 - whe ñ试图用空格键替换'click',你真的想让浏览器在页面上向下滚动吗?按下链接上的空格键通常与按下下一页键的效果相同。 – 2012-02-09 09:47:33

+1

[This](http://stackoverflow.com/questions/596481/simulate-javascript-key-events)可能会回答你的问题。 – themis 2009-09-23 20:50:27

回答

11

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

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

看了上面的文档了解更多信息。

+44

当然,请阅读文档,但海报可能已经知道了。 jQuery事件文档有点不透明。安德鲁卡尔弗给出了一个直接的答案,加上参考了解更多信息。 – 2012-07-01 02:12:28

10

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

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

$(element).sendkeys(string)插入在插入点字符串中 输入,文本区域或CONTENTEDITABLE =真实其他元素。如果 插入点当前不在元素中,则它会记住上次调用sendkeys时插入点的位置(如果 插入点永远不在元素中,则会附加到末尾)。

+0

这个为我工作完美谢谢! – Jmlevick 2013-10-11 10:14:12

+0

你不需要jQuery来使用它,你可以通过获得'bililiteRange'库来使用相同的功能:https://github.com/dwachss/bililiteRange(事实上,jQuery插件只是一个简单的包装器这个独特的图书馆)。 – fiatjaf 2014-09-26 19:24:59

124

我相信这是你在找什么:

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

here

+12

例如,如果与输入控件一起使用,则不会生成任何实际文本。 – 2013-07-04 17:13:14

+4

@AlexBurtsev - 你是对的,那是因为这只触发事件处理程序,就好像特定的按键被按下一样,但实际上没有按下该按键,就像在键盘上按下按键时发生的情况(可能是由于安全原因) – BornToCode 2013-08-04 07:19:27

+3

你有没有理由混淆'$'和'jQuery'? – 2015-06-12 03:22:30

4

这工作:

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);]试试这个 – anu 2013-07-25 06:01:10

+0

我需要在对话框中单击Enter,所以通过这里的代码片段,我用*#myEl * ..谢谢 – gnB 2014-10-01 18:41:15

+0

这对我不起作用 – 2017-08-14 09:13:34

27

另一种选择:

$(el).trigger({type: 'keypress', which: 13, keyCode: 13}); 

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

+1

我不确定'which'是什么,只有'keyCode'适用于SAPUI5(在Chrome上为jQuery 2.2.3) – 2017-05-25 13:29:12

-1

如果你想模拟浏览器的行为是 “撤销” 或 “重做”,你应该试试这个:

function doUndo(){ 
    document.execCommand('undo', false, null); 
} 

function doRedo(){ 
    document.execCommand('redo', false, null); 
} 
+0

这个答案与无关问题 – slfan 2016-09-06 20:53:18

+0

这与问题有关吗? – 2016-09-27 17:24:02

+0

这些方法还可以模拟点击浏览器事件 – parismiguel 2016-09-27 18:10:30