【问题标题】:How to simulate keypress action in javascript/jquery?如何在 javascript/jquery 中模拟按键操作?
【发布时间】:2017-02-02 08:59:09
【问题描述】:

我不是在寻找如何触发事件,我在寻找如何模拟按键动作的方法。

我正在寻找 ACTION 而不是 EVENT...

此代码不适用于我:

element.trigger('focus').trigger({ type : 'keydown', which : 50 })

因为当用户在输入中输入一些东西时,会发生更多的事情,例如。事件(keypress, keyup, keydown),输入字符,触发一些DOM事件等。

使用此代码:

element.trigger({ type : 'keydown', which : 50 })

输入保持为空。我知道我可以使用:

element.trigger({ type : 'keydown', which : 50 }).val(2);

但我正在寻找更完整的解决方案,如果可能,请模拟操作。

有什么建议吗?

【问题讨论】:

  • 我的问题是为什么。为什么你需要模拟用户活动?
  • @hindmost 为什么理由很重要?我想知道如何在javascript中做到这一点,这就是为什么存在stackoverflow来提问......
  • @hindmost 一些插件可以在输入时注册许多事件,我想模拟用户按键操作。我想插件做用户按键时需要做的事情......
  • 您目前形式的问题与主题无关,因为太宽泛,因为不清楚您想要触发/模拟的具体事件/动作。添加详细信息以缩小答案范围
  • @hindmost 谁说我想要触发事件?我想触发 ACTION 而不是 EVENT...

标签: javascript jquery keypress


【解决方案1】:

jQuery为此提供了一个内置的解决方案。

.keypress

$( "#target" ).keypress();
$( "#target" ).keypress(function() {
  console.log( "Handler for .keypress() called." );
});

.keyup

$('#target').keyup();
$('#target').keyup(function() {
    console.log( "Handler for .keyup() called." );
});

.keydown

$('#target').keydown();
$('#target').keydown(function() {
    console.log( "Handler for .keydown() called." );
});

编辑:

所以你想列出事件监听器?见Get event listeners attached to node using addEventListener

获取附加到节点的所有事件侦听器列表的唯一方法 就是拦截监听器的附件调用。

【讨论】:

  • 但是当用户执行按键操作时,会触发更多事件,因为我写了(keypress、keyup、keydown)等......
  • 您没有阅读我的问题,+ 触发了一些 DOM 事件,+ 在输入中输入了字符,+ 我如何确定用户执行按键操作时触发了哪些操作和事件?当用户执行 keypress ACTION 时,会发生超过 10 件事情,而不仅仅是 keyup、keypress 和 keydown 事件......
  • 还是不好回答,按键动作甚至可以移动其他html元素,触发x元素上的x事件......
  • 我知道如何模拟和触发事件,但我想模拟物理键盘按键动作......我不是在谈论事件......
  • @fico7489 keypress, keyup, keydown 是你所能做的(使用 jQuery 或类似的 Javascript 的)。它们会触发 0 到 n 个监听器,因为这就是监听器的用途。无法直接触摸键盘驱动程序,这将是一个巨大的安全风险。
【解决方案2】:

我猜你想模拟特定 keyPress 事件的事件。

在这种情况下,您可以使用 jQuery jQuery.Event Constructor

我希望您尝试模拟数字 2 键。在这种情况下,您可以这样做:

var e = jQuery.Event( "keypress" );
e.which = 50;

$("#some_element").trigger( e );

编辑:我只是想帮忙。 说到重点,如果您想在该事件之后生成一个动作,您可以在下面尝试。

注册您的操作/事件

$("#some_element").keyPress( function( e ){
   // the action to perform when keyPress event raised.
} );

【讨论】:

    【解决方案3】:

    我怀疑您是否会在这里找到问题的正确答案。如前所述,我们缺乏为您提供最佳解决方案的上下文,但我可以尝试。

    我正在寻找 ACTION 而不是 EVENT...

    您无法控制用户的计算机,最接近这一点的是调用事件。所以是的,您可能正在寻找活动。

    因为当用户在输入中输入一些东西时,会发生更多的事情,例如。事件(keypress, keyup, keydown),输入字符,触发一些DOM事件等。

    事件可以模拟,附加字符可以模拟,DOM事件可以模拟。但是,用户用户设备无法模拟。

    您可能需要编写一些抽象。找出当前关注的内容,解析适用于此的内容并模拟行为。也许也可以通过您自己的代码对 addEventListener 调用进行一些低级拦截以代理它们。

    我的建议是找出这是否是您的真正问题,并确保您没有遇到 XY 问题。比如为什么要模拟用户,为什么不把“接线”“逻辑”分开。

    出于安全原因,对浏览器的访问受到限制,因此并非您想要做的所有事情都是可能的,但是,例如,这是为了进行集成测试,您可能可以使用 Selenium 之类的东西来代替它让您做你问过,但只在执行它的机器上。

    【讨论】:

    • 好的,满意的答案是我正在寻找的东西是不可能的......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多