1

当光标位于表单内时,有没有办法捕获所有击键。我需要检测 ENTER 命中,然后模拟 TAB 命中(光标跳转到下一个表单元素)。为什么?人们(会计师)习惯于用单手输入数据,只需使用数字键盘。

4

4 回答 4

2

这是我用来在 asp.net 网格中模拟“Enter”键的代码,就像“TAB”键一样:

function handleEnter (field, event) {
    var keyCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode;
    if (keyCode == 13) {
        var i;
        for (i = 0; i < field.form.elements.length; i++){
            if (field == field.form.elements[i]) //Find the control's index
                break;
        }
        i++; // Go to next control index
        var precField = field.form.elements[i];

        if (precField.type == 'text') {
            if (field.form.elements[i+1].type == 'hidden' && field.form.elements[i + 2].type!='submit')
                handleEnter(field.form.elements[i + 1], event);
            else
                precField.focus();
        }
        else if (precField.type != 'hidden')
            handleEnter(precField, event);

        return false;
    } 
    else
        return true;
}

如您所见,它只是从 1 个文本字段到另一个 ( if (precField.type == 'text')),但我相信您可以根据需要对其进行调整。

我将 js 函数添加到我的 TextBoxes 的 OnKeyDown 事件中:

<asp:TextBox ID="txtP1s" runat="server" OnKeyDown='return handleEnter(this, event);'></asp:TextBox>
于 2012-12-03T19:17:58.993 回答
2

这是一些在表单中模拟选项卡的 jQuery。您需要以:input与您所在的形式相同的形式获取所有元素,然后遍历。它也适用于复选框和任何其他:input捕获的表单元素。

演示:http: //jsfiddle.net/hbV5b/

var onkey = function(e) {
    if ( e.which == 13 ) {
        e.preventDefault();
        var index = -1,
            el = this,
            $forms = $(this).closest('form').find(':input').each(function(i) {
                if( this === el ) {
                    index = i+1;
                    return false;
                }
            });
        index < $forms.length ? $forms[index].focus() : $(el).blur()
    }
};
// attach/detach the handler
$(':input').focus(function() {
    $(this).keypress(onkey);
}).blur(function() {
    $(this).unbind('keypress', onkey);
});
​
于 2012-12-03T19:40:54.160 回答
1

使用 JQuery,您可以在按下 ENTER(键代码 13)时模拟 TAB(键代码 9),使用如下所示:

$(".input").keyup(function (e) {
    if (e.keyCode == 13) {
      jQuery.event.trigger({ type : 'keypress', which : 9 });
    }
});
于 2012-12-03T19:18:56.120 回答
1

如果您的脚本使用 jQuery,那么:

var form = $('someForm');

form.find(':text').on('keyup', function(e) {
    if (e.which === 13){
       form.find(':text[tabindex = ' + (+$(this).prop('tabindex') + 1) + ']').trigger('focus');
    }
});

此代码需要每个字段的 tabindex 属性。例如:

第一个字段:

<input type="text" tabindex="1">

第二个字段:

<input type="text" tabindex="2">

在第一个字段中按 Enter 键后 - 焦点将传递给第二个字段。

于 2012-12-03T19:17:24.127 回答