如何在JavaScript中模拟按键?

时间:2016-02-02 01:48:39

标签: javascript jquery events

我试图找到一种模拟按键的方法。

例如,当功能启动时,按键" Arrow Down"应按下,因此网页应略微滚动。

我只对Chrome感兴趣,jQuery或纯JS都适合。 (平原JS将更为可取)。

我试过的代码示例之一:

var e = $.Event("keydown", { keyCode: 40}); // 40 = down arrow
$("body").trigger(e);
// When I launch it the console, nothing happens. The page is not scrolled.
// May be I missed some obvious?

我搜索并发现了以下相关问题,但解决方案对我不起作用:

换句话说

使用AutoHotkey,您可以轻松制作如下内容:

Down::
Send, {Up}

然后,如果按Down箭头键,它将被触发Up。我只想用JS实现它。

3 个答案:

答案 0 :(得分:7)

正如@rfsbsb指出:Jquery script for simulated key press down not running keyboard shortcut

  

如果您尝试触发某些浏览器或系统范围的键盘快捷方式   然后它是一个死胡同 - 出于安全原因不能这样做。如果它   有可能,你会有互联网上的页面   会(例如)将自己添加到你的书签,甚至没有询问   (通过使用Javascript触发CTRL + B快捷键)。

答案 1 :(得分:5)

使用this answer,我设法改变了一些代码,我想我得到了你想要的东西?

here is my jsfiddle

代码:

jQuery(document).ready(function($) {
    $('body').keypress(function(e) {
        if(e.which == '40') 
            $('body').animate({scrollTop: '100px'});
    });
});
jQuery.fn.simulateKeyPress = function(character) {
    jQuery(this).trigger({
        type: 'keypress',
        which: character
    });
};

 setTimeout(function() {
    $('body').simulateKeyPress(40);
 }, 1000);

答案 2 :(得分:2)

以下是从@Haring10&#39开始的示例:

How to debug EntityMalformedException?

$('body').keydown(function(e) {
  e.preventDefault();
  e.stopImmediatePropagation();

  if(e.which == 40) {
    window.scrollBy(0, -100);
  } else {
    window.scrollBy(0, 100);
  }
});

以编程方式触发keydown-keyup-keypress似乎没有滚动的效果。可以自定义上面的示例以添加动画。