【问题标题】:How can I simulate a keypress in JavaScript? [duplicate]如何在 JavaScript 中模拟按键? [复制]
【发布时间】:2016-02-02 01:48:39
【问题描述】:

我正在尝试找到一种模拟按键的方法。

例如,当功能启动时,应按下“向下箭头”键,因此网页应略微滚动。

我只对 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来实现。

【问题讨论】:

  • 这听起来可能很傻,但是您是否在您的HTML 中导入了jQuery
  • AFAIK 触发 keydown 事件只会使任何 keydown 处理程序进程。您实际上不能让浏览器滚动,因为滚动不是由 JavaScript 的 keydown 事件完成的。为什么不能使用scrollTop操作直接滚动文档?
  • 我同意@Amadan 的观点,这看起来很愚蠢,是一个经典的 X/Y 问题。您正在尝试触发箭头键上的按键,只是为了向下滚动页面,而您只需使用 $(window).scrollTop(100) 等即可。
  • “网络文件管理器”是什么意思,“扩展”是什么意思?另外,请阅读XY problems 以及为什么它们是一个坏主意。如果您想询问有关扩展 Web 文件管理器(无论是什么)的问题,请询问。
  • 它不会直接回答您的问题,但它可能会为您寻找解决方案带来一些启发stackoverflow.com/a/13821309/1949694

标签: javascript jquery events


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    使用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);
    

    【讨论】:

    • 那是什么40,你能解释一下吗?
    【解决方案3】:

    这是一个从@Haring10 的示例开始的示例:

    https://jsfiddle.net/po33vfb4/4/

    $('body').keydown(function(e) {
      e.preventDefault();
      e.stopImmediatePropagation();
    
      if(e.which == 40) {
        window.scrollBy(0, -100);
      } else {
        window.scrollBy(0, 100);
      }
    });
    

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

    【讨论】:

      猜你喜欢
      • 2015-05-31
      • 2018-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-05
      相关资源
      最近更新 更多