エラー処理時のフォーカスについて
[上に]
[前に]
[次に]
チャペル
[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
[[解決]]
解決忘れました(^。^)/
[上に]
[前に]
[次に]