- PR -

Entertでフォーカス移動する場合のチェックについて

1
投稿者投稿内容
未記入
大ベテラン
会議室デビュー日: 2005/03/23
投稿数: 105
投稿日時: 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/03/02
投稿数: 486
お住まい・勤務地: 万博開催地
投稿日時: 2006-08-23 16:23
#投稿する会議室が違うと思いますよ。
Insider.NET 会議室ではないですか。

回答ではありません。

ひょっとして、Enter キーが押された度にポストバックしてるってことですか??

私は、Web に限らず、Windows 系でのコントロールのフォーカス移動は Tab キーが基本だと思っています。

ただ、お客様の中にはホスト系の業務システムに慣れてしまっていて、Enter キーでの移動が当たり前だと思っている人もいらっしゃいます。

そういう方には、くどくど説明するようにしています。
それでも分かってもらえない場合は、仕事をお断りします(ウソ)。
今までは、分かってもらえていますので助かっています。
小僧
ぬし
会議室デビュー日: 2002/08/14
投稿数: 526
投稿日時: 2006-08-23 18:11
今やっている仕事がホストからのリプレースなんですが、
かなり初期段階で「Enterキーでフォーカス移動させてください」と
言われまして、ちょっと前に同様の処理を作りました。
大雑把に言うと、次の移動先の状態をチェックしてからfocus()で
移動させるようにさせました。フォーカスの移動対象毎にonactivate
などのイベントを設定する方法も試しましたが、逆に制御が難しく
なったので、window.onkeydownだけで制御してます。

ホストシステムを使っているお客さんは、Webだからこれは出来ないと
かこれはやり辛いなどということは、ほとんど考えていませんね。
Webブラウザが、ホストリプレースの為に誕生したと言わんばかりの
要求がが多くて、毎日が頓知合戦ですよ(^^)
現状の使い勝手を変えたくないというのが基本みたいです。毎日使う側
としては当たり前なんでしょうが。





[ メッセージ編集済み 編集者: 小僧 編集日時 2006-08-23 18:18 ]
未記入
大ベテラン
会議室デビュー日: 2005/03/23
投稿数: 105
投稿日時: 2006-08-23 18:14
ひろれいさんお返事ありがとうございます。

会議室違いなのは申し訳ありませんでした。
どちらか悩んだんですがjavascript技術と
思いこっちにしました。

ちなみにEnterキーを押したたびにポストバック
しているわけではなくEnterがおされてもポスト
バックしないようにしてフォーカスを移動して
います。

確かにTabでOKといってくれると助かるのですが
こちらはお客様というより上司が・・・

宜しくお願いします。
未記入
大ベテラン
会議室デビュー日: 2005/03/23
投稿数: 105
投稿日時: 2006-08-23 18:30
小僧さんお返事ありがとございます。

確かにお客様や上司というのは、VBのような
作り方があたりまえと思っているので製造などを
する立場としては辛いところです。(><)

話は本題に戻るのですが、

******************************
次の移動先の状態をチェックしてからfocus()で
移動させるようにさせました。フォーカスの移動対象毎にonactivate
などのイベントを設定する方法も試しましたが、逆に制御が難しく
なったので、window.onkeydownだけで制御してます。
******************************

というのはkeydownされた時にそのkeydownされたコントロールの
IDか何かを取得して、そのIDの中身をチェックしてOKなら次にフォーカス
だめなら現在のコントロールにフォーカスするという記述をするという
ことでしょうか?

とりあえずまだためしていないので今から調べてみます。

宜しくお願いします。
小僧
ぬし
会議室デビュー日: 2002/08/14
投稿数: 526
投稿日時: 2006-08-23 19:23
引用:

というのはkeydownされた時にそのkeydownされたコントロールの
IDか何かを取得して、そのIDの中身をチェックしてOKなら次にフォーカス
だめなら現在のコントロールにフォーカスするという記述をするという
ことでしょうか?



いいですね、その線です。
移動しちゃダメだった場合、focus()を実行しないようにしてます。フォーカス
移動させるから面倒臭いという考え方でやってます。ここの処理をうまくやって
あげると、SHIFT + Enterで逆方向フォーカス移動とか、あるコントロールまで
フォーカスが移動したら、それ以降Enterを押してもフォーカス移動させないとか、
色々できますよ。

1

スキルアップ/キャリアアップ(JOB@IT)