Javascript keyup shiftKey不是预期的行为

时间:2013-06-10 17:50:00

标签: javascript

代码示例http://jsfiddle.net/rigaconnect/3Mcxv/6/

以下是具有以下行为的javascript:在输入字段中我输入一些值;然后按住ctrlKey并在输入字段下方单击鼠标;来自上方输入字段的值复制如下。

$(document).ready(function(){
    $("input").on('click', function(e) {
        var name1 = $(this).closest('tr').prev().find('td:eq('+$(this).closest('td').index()+')').find('input').val();
        if(e.ctrlKey) $(this).val(name1).trigger('change');
    });
});

以我想要的相同方式:如果我按住shiftKey并按下向下箭头按钮,则当前输入字段中的值将显示在下面的输入字段中。 这是我试过的代码:

$(document).ready(function(){
    $("input").keyup(function(e) {
        var name1 = $(this).closest('tr').prev().find('td:eq('+$(this).closest('td').index()+')').find('input').val();
        if(e.shiftKey) $(this).val(name1).trigger('change');
    });
});

但是,如果我在输入字段中输入一些值,然后按住shiftKey并按下向下箭头按钮,则值将从当前输入字段中消失。我需要将该值保留在当前输入字段中,并且在下面的输入字段中另外显示相同的值。

我想这是因为prev().find它发现以前是空白的。找到当前的代码是什么?我改为$(this).find但没有工作......

1 个答案:

答案 0 :(得分:1)

这类似于你想要的功能吗?

http://jsfiddle.net/xQxGa/11/ //已更新

$(document).ready(function () {
    var isShiftPressed = false,
        shiftCode = 16,        //    shift key code
        downArrowCode = 40,    //    down arrow key code
        $table = $('table'),
        $inputs = $('input',$table);

    $table
    .delegate('input', 'keydown', function(e) {

        if(e.which===shiftCode){
            //    shift was pressed
            isShiftPressed = true;   
        } else if(isShiftPressed && e.which===downArrowCode){
            //    shift and down arrow were pressed
            var newVal = this.value,
                i = $inputs.index(this),
                next = $inputs.eq(i+1);

            if(next){
                // move value and focus to the next
                next.val(newVal)
                    .focus();
            }
        }

    })
    .delegate('input', 'keyup', function(e) {
        //    no key pressed anymore
        isShiftPressed = false;
    });

});

尝试在jQuery页面中查看示例。