如何用jQuery替换击键?

时间:2011-05-19 20:47:54

标签: jquery keyboard-events keyboard-hook

我需要能够用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模拟按键的方法。

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

1 个答案:

答案 0 :(得分:2)

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

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

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