2023年10月25日水曜日

チェックボックスのフォーカスをEnterの入力で移動する

以前に書いた記事「Enterの入力でページ・アイテムのフォーカスを移動する」にて、ページ・アイテムがチェックボックス・グループだとうまくいかない、との相談がありました。

そのため、以前に作成したAPEXアプリケーションにチェックボックス・グループを追加し、Enterによるフォーカスの移動を実装してみました。

作成したチェックボックス・グループがページに表示されています。


Oracle APEXが生成したチェックボックス・グループのHTMLは、以下のようになっています。

IDP1_CHECKBOX_GROUPのDIV要素の属性としてtableindex="-1"が設定されているため、この要素にフォーカスが当たりません。

以下の2通りの対応方法が考えられます。
  1. P1_CHECKBOX_GROUPのtabindexを0に変更し、フォーカスが当たるようにする。
  2. 子要素のチェックボックスにフォーカスを当てる。
最初の方法の実装です。

ページ・プロパティJavaScriptファンクションおよびグローバル変数の宣言に、以下のJavaScriptを記述します。


ページ・ロード時に実行に以下を記述し、P1_CHECKBOX_GROUPtabindex0に変更します。

document.getElementById("P1_CHECKBOX_GROUP").setAttribute("tabindex",0);


以上で、チェックボックス・グループにフォーカスが当たるようになります。


チェックボックス・グループに含まれるチェックボックスの数に依存するとは思いますが、これじゃない感はあります。

チェックボックス・グループに含まれる、それぞれのチェックボックスにフォーカスを移動するJavaScriptのコードは以下のように記述します。ページ・ロード時に実行のコードは消去します。



上記のJavaScriptコードをコード・エディタで記述していると、チェックボックスのIDであるP1_CHECKBOX_GROUP_0およびP1_CHECKBOX_GROUP_1について、アイテムP1_CHECKBOX_GROUP_0は存在しません。といった警告が表示されます。これらのIDはAPEXのアイテムではないため、この警告は無視できます。


この実装では、以下のようにチェックボックそれぞれにフォーカスが動作します。


今回の記事は以上です。

2番目の実装をしたAPEXアプリケーションのエクスポートを以下に置きました。
https://github.com/ujnak/apexapps/blob/master/exports/on-enter-move-focus-with-checkbox.zip

Oracle APEXのアプリケーション作成の参考になれば幸いです。