3

我的 html 正文中有一个文本框:input type="text" id="text-input"

当用户按下回车键时,我正在使用它来聚焦:

<script>
    $(document).keypress(function(e) {
        if(e.keyCode == 13) {
            $("#text-input").focus();
        }
    });
</script>

我用来试用的网页中只有文本框。当我单击空白区域并按回车键时,“|” 提示将向下错位。如果我重复此单击并按 Enter,则应该在文本框中的“|”会越来越向下移动。

什么地方出了错?

4

2 回答 2

1

尝试使用keyup而不是keypress

$(document).keyup(function(e) {
    if(e.keyCode == 13) {
        $("#text-input").focus();
    }
});​

示例: keypresskeyup

在 chrome 中测试,结果不同。

注意: keypress=(keydown 和 keyup 2 个事件)。可能是这个问题,但不确定。

于 2012-04-27T17:32:36.347 回答
1

我发现返回 false 可以纠正这种行为:

$(document).keypress(function(e) 
{
    if(e.keyCode === 13) 
    {
        $("#text-input").focus();

        return false;
    }
});​

为了改进这一点,您实际上可以使用 and 而不是的组合e.preventDefault();e.stopImmediatePropagation();确保return false;一旦这个处理程序被命中,除了您想要的之外什么都不会发生.focus()

$(document).keypress(function(e) 
{
    if (e.keyCode === 13) 
    {
        $("#text-input").focus();

        e.preventDefault();
        e.stopImmediatePropagation();
    }
});

唯一需要注意的是,它e.stopImmediatePropagation();仅适用于代码中此处理程序之后定义的事件处理程序。这意味着,如果您在 之前有另一个处理程序绑定到文档的按键.focus(),它将继续被击中。因此,要确保仅调用 this ,您需要确保它是代码中定义的第一个处理程序。

在此处查看示例

于 2012-04-27T17:33:55.753 回答