- PR -

AutoPostBackプロパティとFocusの関係

1
投稿者投稿内容
はな
会議室デビュー日: 2005/08/11
投稿数: 4
投稿日時: 2005-08-11 15:19
はじめまして。

現在.netで開発を行っています。
まだまだ初心者なので説明の言葉が足りないかも
しれませんがよろしくお願いします。

フォームにRadioButtonを配置し、
RadioButtonのSelectedIndexChangedイベントで
RadioButtonの横に配置したテキストボックスの
Enabledの制御を行いたいのですが、
RadioButtonのAutoPostBackプロパティをTrueにすると
フォーカスがどこかへ行ってしまいます。
SelectedIndexChangedイベントのモジュールの最後尾に
フォーカスをRadioButtonに当てるコードを記述したのですが
効いていないようで、フォーカスはどこへ行ってしまったのかも
わかりません。。
またAutoPostBackプロパティをFalseにするとフォーカスの
制御はうまくいきます。
でもそれだとSelectedIndexChangedイベントを拾えないので
そういう訳にもいかず悩んでいます…。

対応策はありますでしょうか?
どなたかご存知でしたらお教え願います。
よろしくお願いします。
ぼのぼの
ぬし
会議室デビュー日: 2004/09/16
投稿数: 544
投稿日時: 2005-08-11 17:53
TextBoxの活性・不活性切り替えのためだけにPostBackを行うのはユーザーインターフェースとしてあまり優しくない気がするので、全てクライアントスクリプトでやるのが良いと思います。

ところで、RadioButtonクラスにはSelectedIndexChangedイベントは無いんですけども、RadioButtonListを使っているんでしょうか?
はな
会議室デビュー日: 2005/08/11
投稿数: 4
投稿日時: 2005-08-11 18:23
ぼのぼのさん、ご返答ありがとうございます。

そうです、RadioButtonListを使っています。
変な省略の仕方をしてしまってすみません!!

TextBoxの活性・不活性切り替えのために
AutoPostBackプロパティで行おうとするのは
あまり好ましくないのですね…。
クライアントスクリプトというのは、
フォームのHTMLの記述の中にjavascriptを書き込む
ということでしょうか?
だとすると、コードモジュールで無理にやろうとしなくても
大丈夫なのですね。
知恵をお貸しいただいてありがとうございます。
調べてやってみます!
ぼのぼの
ぬし
会議室デビュー日: 2004/09/16
投稿数: 544
投稿日時: 2005-08-11 19:09
引用:

はなさんの書き込み (2005-08-11 18:23) より:
クライアントスクリプトというのは、フォームのHTMLの記述の中にjavascriptを書き込むということでしょうか?


そういう方法もありますが、サーバ側のコードに書く方法もあります。こんな感じ。

コード:

RadioButtonList1.Attributes("onclick") = _
    "document.getElementById('" & TextBox1.UniqueID & "').disabled = " & _
    "!Form1." & RadioButtonList1.UniqueID & "[0].checked;"


あるいは、

コード:

RadioButtonList1.Attributes("onclick") = "func1()"


みたいに書いておいて、func1()の中身はaspxに直接書く、という方法もあります。
これを使うと、func1()の中身をサーバ側のコードに書くこともできます。
はな
会議室デビュー日: 2005/08/11
投稿数: 4
投稿日時: 2005-08-12 09:34
ぼのぼのさん、ご回答ありがとうございます。

今回、RadioButtonListで
@をチェックしたらテキストAが使用可に、
AをチェックしたらテキストBが使用可に…
という風にしたいので
ぼのぼのさんに教えていただきました
下記の方法をやってみようと思います。

□サーバ側のPage_Loadに
RadioButtonList1.Attributes("onclick") = "func1()"
と、記述して

□aspx側に
<script language="javascript">
function func1()
{
if ( Form1.RadioButtonList1[1].checked == true )
{
Form1.TextBoxA.disabled = true
}
}
</script>

と記述したのですが思うように動きません。
チェックを入れたり外したりしても、
何の変化もないままです…。
何度もお聞きしてしまい大変申し訳ないのですが、
何か足りないこと、おかしなところ等
ございましたらお教えいただきたいです。
よろしくお願いいたします。
ぼのぼの
ぬし
会議室デビュー日: 2004/09/16
投稿数: 544
投稿日時: 2005-08-16 11:34
こんにちわ。だいぶ時間があいてしまったので、もう解決しちゃったかもしれませんが…
引用:

はなさんの書き込み (2005-08-12 09:34) より:
何度もお聞きしてしまい大変申し訳ないのですが、
何か足りないこと、おかしなところ等ございましたらお教えいただきたいです。


ぱっと見、セミコロンがありませんね(^^;
スクリプトエラーになっているんではないでしょうか?インターネットオプションの詳細設定タブの、「スクリプトのデバッグを使用しない」というチェック外して実行してみてください。
はな
会議室デビュー日: 2005/08/11
投稿数: 4
投稿日時: 2005-08-16 13:48
ぼのぼのさん、ご回答ありがとうございました。

だいぶ時間は空いてましたが、解決してませんでした××
ので、本当に助かりました。
ぼのぼのさんのご助言どおり、
「スクリプトのデバッグを使用しない」というチェック
外して実行してみました。
このような設定があるのですね。まだまだ勉強不足です。

「セミコロン!!Σ( ̄ロ ̄lll)」とゆう感じでした。
以下のコードで、無事うまくいきました。
ぼのぼのさん、本当にありがとうございました。

function func1()
{
if ( Form1.RadioButtonList1[1].checked == true )
{
Form1.TextBoxA.disabled = true;
}Else{
Form1.TextBoxB.disabled = false;
}
}

あと、AutoEventWireupを"True"にするのに気が付かず
またまた時間が掛かってしまいました。
本当にまだまだ勉強不足です。。。
1

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