【问题标题】:How do I replace a keystroke with jQuery?如何用 jQuery 替换击键?
【发布时间】:2011-05-19 20:47:53
【问题描述】:

我需要能够用 jQuery 替换击键。当按下右箭头时,我希望按下 tab 键。到目前为止,我有:

<script type="text/javascript" src="jquery-1.6.1.min.js"></script>
<script type="text/javascript" src="jquery.simulate.js"></script>
<script type="text/javascript">
    $(function () {
        $("select").each( function() {
                $(this).keydown(function(event) {
                    if (event.which == '39') {
                        $(this).simulate("keydown", { keyCode: 9, ctrlKey: false, shirtKey: false });
                        $(this).simulate("keypress", { keyCode: 9, ctrlKey: false, shirtKey: false });
                        $(this).simulate("keyup", { keyCode: 9, ctrlKey: false, shirtKey: false });
                        return false;
                    }
            });
        });
    });
</script>

39 是右箭头,9 是标签按钮。此外,模拟 keydown 递归调用事件处理程序,这显然很糟糕,但即使没有那行,这仍然不起作用。

我正在使用位于 (http://code.google.com/p/jqueryjs/source/browse/trunk/plugins/simulate/jquery.simulate.js?r=6063) 的 jquery.simulate.js,因为我找不到只用 jQuery 模拟按键的方法。

按键只是不模拟实际的按键。

【问题讨论】:

  • 在正确的元素上focus 不会更容易(如果你用它来做tab
  • 你真的需要模拟一个选项卡还是只是移动焦点,如果你只是想把焦点移动到下一个元素,这样做可能更容易 $('#nextElement').focus() ;
  • 关注下一个元素是可以的,但我试图在自动生成的页面上执行此操作,所以我无法知道下一个元素的 ID、名称或类似的东西。我只知道我想将焦点转移到下一个 tabindex。

标签: jquery keyboard-events keyboard-hook


【解决方案1】:

您无法使用 javascript 模拟实际的按键操作。它是浏览器安全的核心组件。想象一下能够模拟 Alt-Tab 或 Ctrl-Shift-Del。

当然,您可以定义一个方法来封装您要触发的行为,并在按下特定键时调用该方法。

因此,例如,当有人在另一个选择元素上按下右箭头时跳转到下一个选择元素,我会保留页面上所有选择元素的列表;当按下右箭头时,我会在该列表中找到当前焦点选择的位置,然后 .focus() 找到下一个。

【讨论】:

    猜你喜欢
    • 2017-04-24
    • 1970-01-01
    • 2013-07-28
    • 1970-01-01
    • 2019-11-18
    • 1970-01-01
    • 1970-01-01
    • 2011-10-10
    • 1970-01-01
    相关资源
    最近更新 更多