- PR -

ASP.NETにおけるJavascriptのonChangeイベントについて

投稿者投稿内容
Juni
常連さん
会議室デビュー日: 2004/02/05
投稿数: 25
お住まい・勤務地: 兵庫県
投稿日時: 2004-02-25 09:41
まゆりんさんご返事ありがとうございます。

引用:

まゆりんさんの書き込み (2004-02-25 09:27) より:

正しく機能しないというのは具体的にどういうことですか?




説明不足で申し訳ありません。
正しく機能しないというのは、Enterを押したときに実行されないということです。

具体的には、
現在ValidationSummaryにてTextBoxの数値チェックを行い、エラーがあると
メッセージボックスを出力するという処理をしているのですが、
TextBoxに数値以外を入力した場合、onChangeイベントを記述していると
Enterキーを押した場合にメッセージが表示されずにそのテキストボックス
の内容が空白になってしまいます。
onChangeイベントを記述しなければちゃんとメッセージボックスが出力されるのですが・・・。

まだWebアプリの開発を始めて一ヶ月弱なので知識不足で
原因や対処法がわからずに困ってます。

どうぞよろしくお願いいたします。
Juni
常連さん
会議室デビュー日: 2004/02/05
投稿数: 25
お住まい・勤務地: 兵庫県
投稿日時: 2004-02-25 09:55
かめたろさんご返事ありがとうございます。

引用:

1.WEBサーバーコントロールのjavascriptのイベントについて
   きちさんのご指摘通り、コードビハインド側で
    TextBox1.Attributes.Add("onChange", "Calculation(1)")
    TextBox1.Attributes.Add("onKeyPress", "return KeyCheck()")
   とするのが普通だと思います。



このような記述の方法があると自体知りませんでした。
試しに記述して実行してみたいと思います。

引用:

2.ValidationSummaryが正しく機能しないことについて
   ValidatorのonChange ⇒ 自分で記述したonChange
   の順番でイベントが発生していると思われます。
   従って、Summaryには1アクション前の検証結果が表示されているのでは・・・?
   スクリプトデバッガで確認してみましょう。
   過去スレッド↓
   http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=8774&forum=7


過去スレッドを探して確認してみます。

貴重なご意見どうもありがとうございます。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-02-25 12:22
> タスク一覧に
> 「要素'TextBox'の属性'onChange'が見つかりませんでした。」
> のエラーメッセージが出力されます。
 <asp:TextBox>に、onchangeという属性がないからですね。これはまゆりんさんのご指摘通り、HTML要素に展開されるとき、"そのまま"出力されているようですね。

> 「BC30456: 'Calculation' は 'ASP.Form1_aspx' のメンバではありません。」
> というコンパイルエラーが出てしまうため先述のようにしてみたのです。
 こちらは、OnTextChangedはサーバサイドのイベントのため、ですね。


 ところで、処理の内容は・・・
・テキストボックスがある
・テキストボックスには数値のみ入力可能である
・数値のみとするため、keypressイベントでチェックする
・入力された数値を確認するため、onchangeイベントをチェックする
・onchangeイベントで何をしますか?

また、ValidationSummaryを置いているということですが、ValidationSummaryはValidatorコントロールに依存していると思っているのですが、どんなValidatorコントロールを置いて、どのようにチェックしているでしょうか?また、Validatorコントロールを置けば、onchangeイベントの記述は不要では?

 ValidatorSummaryって、onchangeで機能しましたっけ?ポスト前、またはonblurではなかったですか?onchangeで機能するなら、例えば入力制限を「.{4}」とか(必ず4文字)としていると、1文字目、2文字目、3文字目の入力でアラートが表示されてしまいますよね?アラートボックスを表示させていたら、入力できないですよ。
Juni
常連さん
会議室デビュー日: 2004/02/05
投稿数: 25
お住まい・勤務地: 兵庫県
投稿日時: 2004-02-25 13:27
Jittaさんご返事ありがとうございます。
たびたび説明不足で申し訳ありません。

処理の内容は以下のとおりです。
・フォームに複数のTextBoxがあります。
・onKeyPressにて「1〜9」および「-」ボタンのみ有効にする。
・各TextBoxに対してCompareValidatorにて数値かどうかのチェックを行う。
・onChangeイベント発生時に、各TextBoxの値を加算および金額表示(カンマ編集)
を行う。
Enterを押したときにValidationSummaryにて全項目の最終チェック(数値かどうかのチェック)を行う。
という処理をしようと思っています。

つまり、onchangeイベント時とEnter押下時に二重で項目にチェックを掛けたいと考えています。

このような処理を行いたいと思い先述のようなコーディングをしております。
やはりonchangeとValidationSummaryの併用は難しいのでしょうか?

引用:

Jittaさんの書き込み (2004-02-25 12:22) より:
・onchangeイベントで何をしますか?

また、ValidationSummaryを置いているということですが、ValidationSummaryはValidatorコントロールに依存していると思っているのですが、どんなValidatorコントロールを置いて、どのようにチェックしているでしょうか?また、Validatorコントロールを置けば、onchangeイベントの記述は不要では?

Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-02-25 13:58
 ValidationSummaryは、Validatorコントロールのサマリーを表示するもので、検証(チェック)は行わないのでは?つまり、onchangeを追加した…と、ValidationSummaryは関係ないと思います。
引用:

MSDN - ValidationSummary 概要より:
ValidationSummary クラスは、Web ページ上のすべての検証コントロールからのエラー メッセージをまとめて 1 か所に表示するために使用します。エラーの概要は、 DisplayMode プロパティに基づいて、リスト、箇条書きリスト、または単一の段落として表示できます。

概要は、それぞれ ShowSummary プロパティと ShowMessageBox プロパティを設定することにより、Web ページとメッセージ ボックスに表示できます。




 Enterキーを押したら・・・ということですが、標準ではページの先頭にある<input type=submit>がクリックされます。この動きを変えているということでしょうか。

 とにかく、まずはHTMLソースを確認してみては?
Juni
常連さん
会議室デビュー日: 2004/02/05
投稿数: 25
お住まい・勤務地: 兵庫県
投稿日時: 2004-02-25 15:47
Jittaさんご返事ありがとうございます。

ご指摘の後、いろいろ試してみましたが、
onchangeを使用するのと使用しないのとでは下記のような違いがありました。

・onchangeを使用するTextBoxに誤った値をいれてTabキーを押下すると
TextBoxの中身が空白になった後にFocusが移動する。
・onchangeを使用しないTextBoxでは、誤った値が残ったままFocusが移動する。
・そこでEnterキーを押下するとonchangeを使用しないTextBoxのエラーのみが
ValidationSummaryによって出力する。

上記のような動きでしたので、ValidationSummaryの元となるValidatorのほうに
影響があったのに気付かずに、ValidationSummaryに影響があったと
勘違いしてしまいました。

もしかするとかめたろさんの指摘のとおり、
[ValidatorのonChange ⇒ 自分で記述したonChange ]
の順で実行されてしまうので上記のような動きになってしまうのかなと思うのですが…。
過去ログを見てみるとこれを変更するのは簡単にはできないとのことだったので、
どうしようか思案中です。

もし何か対処法をご存知の方がいればお教えください。

それともこれは私の検討違いなのでしょうか・・・?
Juni
常連さん
会議室デビュー日: 2004/02/05
投稿数: 25
お住まい・勤務地: 兵庫県
投稿日時: 2004-02-25 15:52
Jittaさんご返事ありがとうございます。

ご指摘の後、いろいろ試してみましたが、
onchangeを使用するのと使用しないのとでは下記のような違いがありました。

・onchangeを使用するTextBoxに誤った値をいれてTabキーを押下すると
TextBoxの中身が空白になった後にFocusが移動する。
・onchangeを使用しないTextBoxでは、誤った値が残ったままFocusが移動する。
・そこでEnterキーを押下するとonchangeを使用しないTextBoxのエラーのみが
ValidationSummaryによって出力する。

上記のような動きでしたので、ValidationSummaryの元となるValidatorのほうに
影響があったのに気付かずに、ValidationSummaryに影響があったと
勘違いしてしまいました。

もしかするとかめたろさんの指摘のとおり、
[ValidatorのonChange ⇒ 自分で記述したonChange ]
の順で実行されてしまうので上記のような動きになってしまうのかなと思うのですが…。
過去ログを見てみるとこれを変更するのは簡単にはできないとのことだったので、
どうしようか思案中です。

もし何か対処法をご存知の方がいればお教えください。

それともこれは私の検討違いなのでしょうか・・・?
まゆりん
ぬし
会議室デビュー日: 2002/08/12
投稿数: 539
お住まい・勤務地: よこはま
投稿日時: 2004-02-25 15:56
ボタンをclickしたら一気にカンマ編集や検証などをする・・・・とか^^;
どちらかを諦めるのが得策かと思います。
_________________
まゆりん @ わんくま同盟
Blog る。

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