キーのデフォルト アクションはkeydown
イベント中に実行されるため、当然のことながら、keyup
伝播するまでに、Tab キーはフォーカスを次のフィールドに変更します。
以下を使用できます。
jQuery(document).ready(function() {
$('#firstfield, #secondfield').on({
"keydown": function(e) {
if (e.which == 9) {
alert("TAB key for " + $(this).attr("id") + " .keydown() called.");
}
},
"keyup": function(e) {
if (e.which != 9) {
alert("Handler for " + $(this).attr("id") + " .keyup() called.");
}
}
});
});
これにより、Tab キーが押された場合に、他のキーを処理する前に必要な調整を行うことができます。例については、更新されたフィドルを参照してください。
編集
ご意見を参考に、機能を改良しました。JavaScript は少し複雑になりましたが、説明できるように最善を尽くします。こちらの新しいデモに従ってください。
jQuery(document).ready(function() {
(function($) {
$.fn.keyAction = function(theKey) {
return this.each(function() {
if ($(this).hasClass("captureKeys")) {
alert("Handler for " + $(this).attr("id") + " .keyup() called with key "+ theKey + ".");
// KeyCode dependent statements go here.
}
});
};
})(jQuery);
$(".captureKeys").on("keydown", function(e) {
$("*").removeClass("focus");
$(this).addClass("focus");
});
$("body").on("keyup", "*:focus", function(e) {
if (e.which == 9) {
$(".focus.captureKeys").keyAction(e.which);
$("*").removeClass("focus");
}
else {
$(this).keyAction(e.which);
}
});
});
基本的に、class="captureKeys"
キープレスを監視したい要素に与えます。最初にその 2 番目の関数を見てkeydown
ください。要素の 1 つで が起動さcaptureKeys
れると、 というダミー クラスが与えられfocus
ます。これは、最新の要素を追跡して焦点を当てるためのものです (.focus
デモでは、視覚的な補助として背景を示しています)。したがって、どのキーが押され.focus
ても、それが押された現在の要素にはクラスが与えられます.captureKeys
。
次に、が(要素だけでなく) 任意の場所keyup
で起動されると、関数はそれがタブであったかどうかを確認します。そうであった場合、フォーカスは既に移動しており、最後にフォーカスを持っていた要素でカスタム関数が呼び出されます ( )。タブでない場合は、現在の要素で呼び出されます (ただし、 がある場合のみ)。.captureKeys
.keyAction()
.focus
.keyAction()
.captureKeys
これにより、必要な効果が得られるはずです。theKey
関数内で変数を使用して、押されたキーをkeyAction()
追跡し、それに応じて動作させることができます。
これに関する 1 つの主な注意点:要素が DOM の最後の要素である場合、.captureKeys
Tab を押すと、ほとんどのブラウザーでドキュメントからフォーカスが削除され、keyup
イベントは決して発生しません。これが、デモの下部にダミー リンクを追加した理由です。
これは基本的なフレームワークを提供するので、ニーズに合わせて変更するのはあなた次第です。それが役に立てば幸い。