2006-02-24
_ Enter キーを押したら次のフォームへ Focus を移動

…なんて要望がきた.もともと 5250 エミュレータなんかを使っていた人にとっては,この Enter キーで Focus を移動することが普通みたい.ちなみに Focus が移ったときは,フォーム内にすでに文字列があった場合は選択されていて,内容を変更しない場合はクリアするとか.あの黒い画面になじみの薄い私にとっては,ブラウザでそんな挙動をされた日には,二度と使うかこんなシステム,とか思ってしまいそうです.
UFJ のオンラインバンキングで契約番号を入力する部分も,規定の桁数を入力すると勝手に次の入力フォームに Focus を移してくれる(IEのみ).フォームの入力項目の移動には Tab キーを使う人なので,勝手に Focus を移動されるのはなんか気持ち悪い.
と,まぁそんなことを思いながらも,一応,JavaScript でできることは確認しておこうと,誰かが置いてった JavaScript 辞典を片手にごりごりと書いてみる.
<script language="JavaScript"><!--
//カウンター
var c = 0;
//最初の入力フィールドに Focus
function init() {
document.forms[0].elements[0].focus();
document.forms[0].elements[0].select();
}
//Enter押下時
function moveFocus() {
if (event.keyCode == 13) {
//type='text'のみ対象
if (document.forms[0].elements[c].type == 'text') {
//デフォルトの値と変わってなければ値を消す
if (document.forms[0].elements[c].value == document.forms[0].elements[c].defaultValue) {
document.forms[0].elements[c].value = "";
}
//カウントアップ
c++;
//次の element も text なら選択
if (document.forms[0].elements[c].type == 'text') {
document.forms[0].elements[c].select();
}
} else if (document.forms[0].elements[c].type == 'button') {
//ボタンにきたら送信
document.forms[0].submit();
}
}
}
document.onkeydown=moveFocus;
window.onload=init;
//-->
</script>
ちなみに IE でのみ動作可.ボタンの type 属性が submit の場合は 入力エリアで Enter キーを押すと,即 submit される.そんなわけで,type 属性が button な送信ボタンを作成して,即 submit は回避.でも,今回のプロジェクトで採用しているフレームワークでは,ボタンは type 属性が submit のものしか生成できないから,やっぱり利用できない.
あと,Enter キーを押すことでカウントアップさせているので,Tab キーでの遷移と併用するとおかしな挙動をとるから,とてもじゃないけど使い勝手がよくなるとは思えません.
と,いうわけで,この要望はフレームワークの縛りと,一般的な動作ではないということで却下.