カーソルがフォーム内にあるときにすべてのキーストロークをキャプチャする方法はありますか?ENTERヒットを検出してから、TABヒットをシミュレートする必要があります(カーソルが次のフォーム要素にジャンプします)。なんで?人(会計士)は、テンキーを使用するだけで、片手でデータを入力するために使用されます。
4 に答える
これは、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>
フォーム内のタブをシミュレートする 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);
});
スクリプトが 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 番目のフィールドに渡されます。
JQuery を使用すると、次のような方法で ENTER (キー コード 13) が押されたときに TAB (キー コード 9) をシミュレートできます。
$(".input").keyup(function (e) {
if (e.keyCode == 13) {
jQuery.event.trigger({ type : 'keypress', which : 9 });
}
});