迭代数组并跳转到按键上的下一项

时间:2015-05-07 11:26:34

标签: javascript jquery

我有一个带有字母的数组,我想用上下键进行迭代,然后选择一个带回车的字母,然后用回车跳转到下一个,但我不知道如何实现。 到目前为止,我已经得到了这个:

var i = 0;

var letters = ['a','b','c','d','e']

$(document).ready(function() {
  $(document).keypress(function(e) {

    e.preventDefault();

    var keyCode = e.which;
        arrow = {up: 38, down: 40, enter: 13};

    switch(e.keyCode)
    {
        case arrow.up:
            alert('up');
        break;

        case arrow.down:
            alert('down');
        break;

        case arrow.enter:
            $('#box').html(letters[++i % letters.length]);
        break;
    }
});
});

所以我的第一个问题是: 这通过输入键上的数组,但我无法更改键值。如果我想让down键迭代数组,没有任何反应,我做错了什么? 第二个:如何在按键上跳转到一封新信?

更新

哎呀,现在我离我想要的更近了:

case arrow.up:
            $('#letterbox').html(letters[--i % letters.length]);
        break;

        case arrow.down:
            $('#box').html(letters[++i % letters.length]);
        break;

        case arrow.enter:
            $('#box2').html(letters[++i % letters.length]);
        break;

向上和向下键遍历数组,输入会向div '#box2'输出一个新字母,但它会继续迭代第一个框。如何从当前框中迭代数组?

2 个答案:

答案 0 :(得分:2)

我不确切知道为什么但是按键不会跟踪箭头键。 改为使用keydown。

答案 1 :(得分:1)

这样的事可能吗? http://jsfiddle.net/hdyjLLr9/3/

<input type="text" id="displayCurrentSelection" />
<input type="text" id="enterSelection" />

JS

var i = 0;
var letters = ['a', 'b', 'c', 'd', 'e'];
var $currentSelection;
var $enterSelection;

$(document).ready(function () {
    var arrow = {
                up: 38,
                down: 40,
                enter: 13
            };

    $enterSelection = $('#enterSelection');
    $currentSelection = $('#displayCurrentSelection');
    $currentSelection.val(letters[i]);

    $(document).keypress(function (e) {
        e.preventDefault();

        var keyCode = e.keyCode || e.which;

        switch (keyCode) {
            case arrow.up:
                i = (++i) % letters.length;
                break;
            case arrow.down:
                if (i > 0) i--;
                else i = letters.length - 1;
                break;
            case arrow.enter:
                $enterSelection.val(letters[i]);
                i = (++i) % letters.length;
                break;
        }
        $currentSelection.val(letters[i]);
    });
});