0

我正在使用此功能来检查Enter Key压力机并模仿压力机的动作Tab Key。但是,当用户到达最后一个输入时:文本我希望它接受Enter Key并且不使用该功能

这可能吗?

$('input').live("keypress", function (e) {
    /* ENTER PRESSED*/
    if (e.keyCode == 13) {
        /* FOCUS ELEMENT */
        var inputs = $(this).parents("form").eq(0).find(":input");
        var idx = inputs.index(this);
        if (idx == inputs.length - 1) {
            inputs[0].select()
        } else {
            inputs[idx + 2].focus(); // Skips two inputs
            inputs[idx + 2].select();
        }
        return false;
    }
});
4

1 回答 1

2

您应该将return语句移动到else块中:

$(document).on('keypress', 'input', function (e) {
    /* ENTER PRESSED*/
    if ( e.keyCode == 13 ) {
        /* FOCUS ELEMENT */
        var inputs = $(this).closest('form').find(":input");
        var idx = inputs.index(this);
        if (idx == inputs.length - 1) {
            inputs[0].select()
        } else {
            inputs[idx + 2].focus(); // Skips two inputs
            inputs[idx + 2].select();
            return false;
        }
    }
});

PS你应该考虑缓存你的选择器。由于我不知道您的具体用例,因此我无法为您提供适当的帮助,但是在每次按键时查询DOM 都是灾难的根源


在不确切知道您如何使用它的情况下,这是一个缓存的快速示例:

var inputs;

$(document).on('keypress', 'input', function (e) {
    if ( e.keyCode == 13 ) {
        inputs = inputs || $(this).closest('form').find(":input");
        // The rest of your code...
    }
});

这会检查是否inputs已经有一个值,如果没有,它会查询 DOM。

于 2012-10-28T22:51:08.407 回答