SmallStyle


2006-02-24

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

5250 エミュレータ

…なんて要望がきた.もともと 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 キーでの遷移と併用するとおかしな挙動をとるから,とてもじゃないけど使い勝手がよくなるとは思えません.

と,いうわけで,この要望はフレームワークの縛りと,一般的な動作ではないということで却下.


about me

いろいろと興味を持ったことを書いてます.ちょっとしたことは hb(@smallstyle) on Twitter で書いてます.

Archive

2003|01|02|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|12|