JQuery - “|”当关注文本框时,光标未对齐

时间:2012-04-27 17:24:23

标签: jquery

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

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

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

我用来试用它的网页上只有文本框。当我点击空白区域,然后按回车键,“|”提示将向下错位。如果我重复这个点击并按回车键,那么应该在文本框中的“|”会继续向下移动。

出了什么问题?

2 个答案:

答案 0 :(得分:1)

尝试使用keyup代替keypress

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

示例: keypresskeyup

在chrome中测试,结果不同。

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

答案 1 :(得分:1)

I found that returning false corrects the behavior:

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

        return false;
    }
});​

为了改进这一点,您实际上可以使用e.preventDefault();e.stopImmediatePropagation();而不是return false;的组合来确保一旦命中此处理程序,除了{{1你想要的是什么:

.focus()

唯一需要注意的是$(document).keypress(function(e) { if (e.keyCode === 13) { $("#text-input").focus(); e.preventDefault(); e.stopImmediatePropagation(); } }); 仅适用于代码中此处理程序后定义的事件处理程序。这意味着,如果您在e.stopImmediatePropagation();之前将另一个处理程序绑定到文档的按键,它将继续被击中。因此,为了确保调用此方法,只需调用它,您需要确保它是代码中定义的第一个处理程序。

See an example here