エラー処理時のフォーカスについて

[上に] [前に] [次に]
チャペル [E-Mail] 2000/02/15(火) 12:38:15
こんにちわです。

質問です。

現在、私は入力フォームで全角半角のチェックを行っています。
チェックのタイミングはonchangeです。

そこでエラーがあった場合、今はalertでダイアログを表示しているだけなのですが、
エラーが発生したら、ダイアログを表示してその入力フォームにフォーカスをセットしたいのですが・・・。

つまり、全角半角チェックをして、エラーがあったらその入力フォームから抜けられないようにしたいのですが、その方法が思い付けません。

何か良い方法はないでしょうか?

以上、よろしくお願い致します。

チャペル 2000/02/15(火) 12:41:26
すいません追加です。
環境はWinNT。公開する物ではないので、IE5.x限定でも構いませんので。

ラウォッチ 2000/02/15(火) 13:42:48
現状のalertでのダイアログ表示処理の後に focus()すればOKかと。

alertを出した時点で、エラーのテキストボックスはわかっているのだから、
alertでのダイアログ表示処理の後に
document.フォーム名.テキストボックス名.focus();
を追加。でいけるかな!?

かえる 2000/02/15(火) 13:54:23
これでどうでしょうか?
<input type=text onchange="errorChack()">

<script>
function errorChack()
{
  if( ... ){
    //エラー時
    event.srcElement.onblur = this.focus;
  }else{
    //正常時
    event.srcElement.onblur = "";
  }
}
</script>

チャペル 2000/02/15(火) 14:22:48
ラウォッチさん、かえるさん、レスありがとうございます。

ラウォッチさん
>alertを出した時点で、エラーのテキストボックスはわかっているのだから、
とはどういう事でしょうか?
Form名やElement名を取得する事ができるのでしょうか?
その方法がわからないです。

かえるさん、
コード試させていただきました。
ですが、マウスで別の場所にフォーカスを移動する場合はうまく行くのですが、Tabキーを使用した場合、ダイアログが3回ほど表示されてしまいます。

なんとかならないでしょうか?

チャペル 2000/02/15(火) 14:33:27
ラウォッチさん、かえるさん、レスありがとうございます。

ラウォッチさん
>alertを出した時点で、エラーのテキストボックスはわかっているのだから、
とはどういう事でしょうか?
Form名やElement名を取得する事ができるのでしょうか?
その方法がわからないです。

かえるさん、
コード試させていただきました。
ですが、マウスで別の場所にフォーカスを移動する場合はうまく行くのですが、Tabキーを使用した場合、ダイアログが3回ほど表示されてしまいます。

なんとかならないでしょうか?

ラウォッチ 2000/02/15(火) 14:37:00
>Form名やElement名を取得する事ができるのでしょうか?
onchangeで起動する関数にエレメントのインデックスを引数で渡して、
関数側で、alertでダイアログを表示したあと、

document.Form名.elements[XX].focus();

XXはエレメントのインデックスが格納されている引数値。
で、どうです。

チャペル 2000/02/15(火) 14:43:01
ラウォッチさん、

インデックスの数値を引数で渡すかぁ・・・。
やっぱりそれしかないですかねぇ。
できれば、そのインデックスの数値を、渡すのではなく、取得できればと思ったのですが。


かえるさん、
event.srcElement
とは、何者でしょうか?
初めて拝見しました。参考書にも載っていなかったので。

チャペル 2000/02/15(火) 14:43:45
ラウォッチさん、

インデックスの数値を引数で渡すかぁ・・・。
やっぱりそれしかないですかねぇ。
できれば、そのインデックスの数値を、渡すのではなく、取得できればと思ったのですが。


かえるさん、
event.srcElement
とは、何者でしょうか?
初めて拝見しました。参考書にも載っていなかったので。

チャペル 2000/02/15(火) 14:45:20
???なんで二重投稿になるのだろう???
投稿した後のページで更新すると、また送信されるのかな?

EMI 2000/02/15(火) 15:05:09
>投稿した後のページで更新すると、また送信されるのかな?
その通りです。
「フォームデータの再投稿」とかいう警告が出ませんでしたか?
IEならば出るはずです。(NN/NCは知りません。出たような気もするが)

チャペル 2000/02/15(火) 15:09:57
EMIさん、
何故だかしらないですけど、警告でませんでした。
う〜ん???ちなみに使っているのはIE5.01。

引き続き、当初の質問の良い方法募集中です。

たかぴー 2000/02/15(火) 15:41:09
http://www.tohoho-web.com/wwwjsx33.htm
↑参照

チャペル 2000/02/15(火) 16:06:47
たかぴーさん、
その方法だと、やっぱり事前にElement名が解かっていないとできないですよね?(私がちゃんと読み取ってないだけだったらすいません。)

かえる 2000/02/15(火) 16:08:10
とりあえずeventオブジェクトについてはこちらを参照してください。
http://www.microsoft.com/japan/developer/library/psdk/jpisdk/dhtml/references/objects/obj_event.htm

Tabキーの方はちょっと調べてみます。

チャペル 2000/02/15(火) 18:30:47
>とりあえずeventオブジェクトについてはこちらを参照してください。

大体、解かりました。

>Tabキーの方はちょっと調べてみます。

そこまでしてもらってすいません。
よろしくお願い致します。

かえる 2000/02/15(火) 20:05:47
呼び出した関数の中でthisポインタを使用しても呼び出し元が参照されるわけではなく、windowオブジェクトが
参照されるので、this.focus()とすると、windowにフォーカスを当てた状態になってました。

先ほどのコードの
event.srcElement.onblur = this.focus;

event.srcElement.onblur = event.srcElement.focus;
に直してください。

または以下のコードでも同様の効果が得られます。
<input type=text onchange="this.onblur=( valueCheck(this.value) ? null : this.focus )">
<script>
function valueCheck(val){
  if( ... ){
    //エラー時
    alert();
    return false;
  }else{
    //正常時
    return true;
  }
}
</script>

ただ、フォーカスが移るのは抑止できますが、ボタン等の操作はできてしまうので、onsubmit時にも
項目チェックを行ったほうが良いかもしれません。

チャペル 2000/02/15(火) 20:21:15
かえるさん、レスありがとうございます。
解決と行きたいところなのですが・・・・、
エラーを修復したあともフォーカスがまったく移動しなくなってしまいました。

おとなしく、インデックスを渡していったほうがいいのかな?

おしいところまでいってるんですけどねぇ。

チャペル 2000/02/15(火) 20:42:34
何とか解決できました♪

かえるさんの、
event.srcElement.focus;を
event.srcElement.focus();にして、
呼び出すアトリビュートをonblurにしたら正常に動作しました。

アドバイスして下さった方々、ありがとうございました。
また機会があったらよろしくお願いします。

チャペル 2000/02/15(火) 20:44:01
[[解決]]
解決忘れました(^。^)/

[上に] [前に] [次に]