3

代码示例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但不工作....

4

1 回答 1

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

于 2013-06-17T21:10:41.450 回答