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')) が、必要に応じて調整できると確信しています。

TextBoxes の OnKeyDown イベントに js 関数を添付しました。

<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 を使用している場合:

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">

2 番目のフィールド:

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

最初のフィールドで Enter キーを押すと、フォーカスが 2 番目のフィールドに渡されます。

于 2012-12-03T19:17:24.127 に答える
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 に答える