- PR -

処理中に画面を利用不可にするには?

投稿者投稿内容
きよよ
常連さん
会議室デビュー日: 2007/01/17
投稿数: 32
投稿日時: 2007-02-19 15:06
度々お世話になります。

環境:ASP2.0(VS2005) IE6

ボタン押下時に、処理している間は画面のすべてのコントロールを、
利用不可(Enabled=false)にして、処理終了後に、また利用可に戻したい
と考えています。

以下のようにやってみましたが、うまくいきません。
@Panelコントロールの上にすべてのコントロールを配置
AボタンのonClientClickから、javascriptでPanelコントロールを
 利用不可にする
Bボタン押下時の処理の最後に、Panelコントロールを利用可にする。

Aのjavascriptで、Panelと一緒に、押下したボタンも利用不可にするので、
肝心のBのボタン押下イベントが発生してくれません。
 (当たり前のことですが・・・、私の考えが甘かったです。)

このように処理中の画面の利用可否を制御することは可能でしょうか?
また可能でしたらアルゴリズムというか、処理手順をご教授ください。
burton999
ぬし
会議室デビュー日: 2003/10/06
投稿数: 898
お住まい・勤務地: 東京
投稿日時: 2007-02-19 15:38
引用:

ボタン押下時に、処理している間は画面のすべてのコントロールを、
利用不可(Enabled=false)にして、処理終了後に、また利用可に戻したい
と考えています。



フォームの二重送信を防止したいということでしょうか?
でしたら、以下が参考になるかもしれません。

http://codezine.jp/a/article/aid/769.aspx
きよよ
常連さん
会議室デビュー日: 2007/01/17
投稿数: 32
投稿日時: 2007-02-19 16:42
ご返事ありがとうございます。

私の説明で足らない部分がありました。

2重送信を防ぐのことも大きな理由なのですが、もう一つ、
処理中に画面を利用不可にすると共に、カーソルを砂時計にすることによって
ユーザーに”処理中”ということを視覚的に認識させたいのです。

ご紹介頂いたURLにある2つの方法を参照させていただきました。
ボタンだけ利用不可にすると、javascript実行後にそのボタンのイベントが
実行されません。
また、画面をかぶせる方法も実際には画面の操作はできるようです。

javascriptで画面を利用不可にした後でも、押下したボタンの処理を
実行することは、ASPでは不可能でしょうか?

または、ボタン押下時の処理中に以下の用件
@画面のボタンや入力項目は使用できない
Aカーソルがどこにあっても砂時計マーク(タイトルバーやステータスバーは除く)
を満たす方法はないでしょうか?




burton999
ぬし
会議室デビュー日: 2003/10/06
投稿数: 898
お住まい・勤務地: 東京
投稿日時: 2007-02-19 17:06
引用:

また、画面をかぶせる方法も実際には画面の操作はできるようです。



これはどのようなケースのことを言っていますか?
参照ページにも書かれていますが、ダミーの無効ボタンを用意する方法などを検討するしかないのでは。
砂時計については、JavaScriptで設定できるはずです。
かめたろ
ぬし
会議室デビュー日: 2003/03/20
投稿数: 255
投稿日時: 2007-02-20 10:49
レイヤーを使う方法は、レイヤーのZ-INDEXを最前面にしてもリストボックスやドロップダウンリストはさらにその前面に出てしまうので(たぶんIEの場合のみ)注意が必要です。IFRAMEシム技法とかいうので一応対処できます。スタイルにcursor:waitを予め設定しておけば砂時計になります。onclick時のcursor変更は微妙だったような・・・

二重送信を防止については、onclickでdocument.readyStateを判定する手も。サーバイベントも発生するし。disableにするやり方が一般的のようですが、document.readyStateでの判定ってなにかまずいケースがあるんでしたっけ・・・。いまさらながらに不安になってきました。

両方合わせて使ったことがあります。

画面のすべてのコントロールをdisableにするとしたら、onclickでhiddenのinputにvalueを詰め込んで片っ端からdisableにして、サーバ側でhiddenのinputを参照するってかんじでしょうか。めんどくさいし、やる意味があるのかは疑問ですが。
mio
ぬし
会議室デビュー日: 2005/08/25
投稿数: 734
お住まい・勤務地: 神奈川県
投稿日時: 2007-02-20 12:10
どうしてもというなら、画面を非表示にするのが一番確実でしょう。

レイヤーをかぶせる方法は、tabキーでコントロールを移動すれば操作できます。
といいつつ前に作ったものは、そこは無視してるけど。

onsubmitでフラグを見て、すでに立ってたらreturn falseだけでもいい気もしますが。
コントロールに関しては、IEだけなら<form>をdisableにするという手も。
きよよ
常連さん
会議室デビュー日: 2007/01/17
投稿数: 32
投稿日時: 2007-02-20 16:49
みなさんお返事ありがとうございます。

カーソルが画面のどこにいても、砂時計にするには、画面の全項目を
Enabled=falseに設定する必要がありますが、
JavaScriptでdisabledをTrueに設定すると、ボタン押下時のPostBackで
画面のコントロールの値をクリアしてしまう現象などが起きました。
(テキストはReadOnlyにすれば、値をクリアしないそうです。)

また、リンクボタンはEnabledをfalseにしても、見た目は使えないように
見えますが、クリックすると処理を実行してしまいます。

したがって今回は、以下のようにしました。
@テキストやコンボなどの入力項目は制御しない。
AボタンはWebコントロールライブラリを利用したコントロールによって、
 ボタン押下時に利用不可にする。
Bカーソルは砂時計にしない

Windowsアプリケーションなら、迷うことなく簡単にできることでも
ASPになると実装が不可能だったり、可能でも処理が複雑になってしまうのですね。

皆さん、本当にありがとうございました。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2007-02-20 22:10
ご参考→ASP.NET<wankuma.com>

[ メッセージ編集済み 編集者: Jitta 編集日時 2007-02-20 22:21 ]

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