- - PR -
Entertでフォーカス移動する場合のチェックについて
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-08-23 16:11
いつもおせわになります。
現在ASP.NET2003 にて開発を行っています。 現在HTMLのコントロールをEnterにてフォーカス移動を 行っています <form id="fm" onkeydown="if(event.keyCode==13){if(window.event.srcElement.type=='text'){return false;}}" method="post" runat="server"> フォームの設定を上記のようにし 各コントロールに onactivate="fnc_setNext('次のコントロール名');" javascriptの部分に window.document.onkeydown = fnc_goNext; var nextObj = ""; function fnc_setNext(strName){ nextObj = strName; } function fnc_goNext(){ if (event.keyCode == 13){ if(nextObj != ""){ if(document.getElementById(nextObj)){ document.getElementById(nextObj).focus; }else{ } } } } というような記述をしてEnterにてfocusを移動しています。 この際に例えばテキストボックスで文字が入力されていたら 次のテキストボックスにうつらずフォーカスを元のテキスト ボックスに戻すといった処理を行いたいのですが 例 テキストボックス1 → テキストボックス2(通常) テキストボックス1 → エラーのメッセージボックス → テキストボックス1 (エラー時) としたいのでテキストボックス1のonchangeイベントの部分に テキストボックス1の内容を確認して数値でなければ テキストボックス1.focus();としてフォーカスを移動としている のですがonactivateのイベントが優先されて次のコントロール にフォーカスがいってしまいます。 これをテキストボックス1に戻す方法はないでしょうか? あとWebでのシステム開発でEnter時にチェックをするよう な方法は一般的ではないのでしょうか? (もちろんボタン押下時などにもチェックはするが・・) その辺りのも意見もあればお聞かせください。 宜しくお願いします。 | ||||
|
投稿日時: 2006-08-23 16:23
#投稿する会議室が違うと思いますよ。
#Insider.NET 会議室ではないですか。 回答ではありません。 ひょっとして、Enter キーが押された度にポストバックしてるってことですか?? 私は、Web に限らず、Windows 系でのコントロールのフォーカス移動は Tab キーが基本だと思っています。 ただ、お客様の中にはホスト系の業務システムに慣れてしまっていて、Enter キーでの移動が当たり前だと思っている人もいらっしゃいます。 そういう方には、くどくど説明するようにしています。 それでも分かってもらえない場合は、仕事をお断りします(ウソ)。 今までは、分かってもらえていますので助かっています。 | ||||
|
投稿日時: 2006-08-23 18:11
今やっている仕事がホストからのリプレースなんですが、
かなり初期段階で「Enterキーでフォーカス移動させてください」と 言われまして、ちょっと前に同様の処理を作りました。 大雑把に言うと、次の移動先の状態をチェックしてからfocus()で 移動させるようにさせました。フォーカスの移動対象毎にonactivate などのイベントを設定する方法も試しましたが、逆に制御が難しく なったので、window.onkeydownだけで制御してます。 ホストシステムを使っているお客さんは、Webだからこれは出来ないと かこれはやり辛いなどということは、ほとんど考えていませんね。 Webブラウザが、ホストリプレースの為に誕生したと言わんばかりの 要求がが多くて、毎日が頓知合戦ですよ(^^) 現状の使い勝手を変えたくないというのが基本みたいです。毎日使う側 としては当たり前なんでしょうが。 [ メッセージ編集済み 編集者: 小僧 編集日時 2006-08-23 18:18 ] | ||||
|
投稿日時: 2006-08-23 18:14
ひろれいさんお返事ありがとうございます。
会議室違いなのは申し訳ありませんでした。 どちらか悩んだんですがjavascript技術と 思いこっちにしました。 ちなみにEnterキーを押したたびにポストバック しているわけではなくEnterがおされてもポスト バックしないようにしてフォーカスを移動して います。 確かにTabでOKといってくれると助かるのですが こちらはお客様というより上司が・・・ 宜しくお願いします。 | ||||
|
投稿日時: 2006-08-23 18:30
小僧さんお返事ありがとございます。
確かにお客様や上司というのは、VBのような 作り方があたりまえと思っているので製造などを する立場としては辛いところです。(><) 話は本題に戻るのですが、 ****************************** 次の移動先の状態をチェックしてからfocus()で 移動させるようにさせました。フォーカスの移動対象毎にonactivate などのイベントを設定する方法も試しましたが、逆に制御が難しく なったので、window.onkeydownだけで制御してます。 ****************************** というのはkeydownされた時にそのkeydownされたコントロールの IDか何かを取得して、そのIDの中身をチェックしてOKなら次にフォーカス だめなら現在のコントロールにフォーカスするという記述をするという ことでしょうか? とりあえずまだためしていないので今から調べてみます。 宜しくお願いします。 | ||||
|
投稿日時: 2006-08-23 19:23
いいですね、その線です。 移動しちゃダメだった場合、focus()を実行しないようにしてます。フォーカス 移動させるから面倒臭いという考え方でやってます。ここの処理をうまくやって あげると、SHIFT + Enterで逆方向フォーカス移動とか、あるコントロールまで フォーカスが移動したら、それ以降Enterを押してもフォーカス移動させないとか、 色々できますよ。 |
1