Javascript keyup shiftKey不是预期的行为

Javascript keyup shiftKey不是预期的行为,javascript,Javascript,代码示例 下面是具有以下行为的javascript:在输入字段中输入一些值;然后按住ctrlKey并用鼠标单击输入字段下方;上面输入字段中的值复制到下面 $(document).ready(function(){ $("input").on('click', function(e) { var name1 = $(this).closest('tr').prev().find('td:eq('+$(this).closest('td').index()+')').find

代码示例

下面是具有以下行为的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');
    });
});
然而,若我在输入字段中输入一些值,然后按住Shift键并按下底部箭头按钮,该值将从当前输入字段中消失。我需要该值保留在当前输入字段中,并且在输入字段的正下方显示相同的值


我想这是因为
prev().find
它发现previous是空的。找到当前代码的正确代码是什么?我更改为
$(此)。查找
但不工作….

这是您想要的功能吗

//更新

$(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页面中的示例。

您是否尝试过在frefox中使用firebug并查看控制台中的错误?没有尝试过。。。我想没有预期的行为;我的意思是脚本可以工作,但不能做我想要的;需要改变一些东西;不明白什么。请尝试;在JS中使用firebug或任何其他调试器都是一个必须放置的代码,首先在输入字段中键入某物,然后按底部箭头,然后按住shift键,再按底部箭头;但若在第一个输入字段中键入一些内容,然后按住shift键,按下底部箭头,则不会像预期的那个样工作。我建议你们不要太多地使用链。如果你让这像5行函数,它将是。。。可读且易于通过console.log()进行测试;。是的,是这样的,但不完全是这样。用户在输入字段中输入smth,然后按住shift键并按底部箭头键。光标在字段下方移动一个字段,并在字段中从上方粘贴值。就像这里一样,但是当用户从第二个字段移动到第三个字段时,不会复制任何内容。因此,当在第二个字段复制内容时,您也希望光标移动到第二个字段。但您也只希望从第一个输入字段到第二个输入字段使用此功能。不是从2号到3号,对吗?在这里,您是对的,我希望光标移动到第二个字段。而且还想转移到所有其他领域(第三等,如果有更多的领域)。顺便说一下。下面是对多列的修改。若按住SHIFT键并按底部箭头,光标将移动,值将复制到右侧输入字段。但预期的光标会转到正下方的字段,值会复制到正下方的字段。这取决于您在第17行中选择“下一步”的方式。例如,如果您知道每行有3个输入字段,只需执行next=$inputs.eq(i+3);( ). 但这不是一个好的实践,您应该找到更好的方法来标识代码中的行和输入字段。不过你更清楚你需要什么。