- PR -

textチェンジイベントとButtonクリックイベントについて

1
投稿者投稿内容
taro
ベテラン
会議室デビュー日: 2003/08/06
投稿数: 55
投稿日時: 2004-05-09 13:52
ASP.netで開発をしているものです。

TextBoxのtext_changeイベントとボタンのButton_clickイベントは両立できないのでしょうか?
現在、text_changeイベントのみ動いてしまう状況です。
これを両方イベントを発生させるか、Button_clickイベントのみ発生させたいと思っております。

どなたかご教授お願いいたします。

He
大ベテラン
会議室デビュー日: 2002/12/18
投稿数: 141
投稿日時: 2004-05-09 15:01
『text_changeイベントのみ動いてしまう』というのが具体的にどういう状況なのかがいまいち掴めませんが、
『TextBoxの値を変更すると、勝手に(ボタンをクリックする前に)TextChangedのイベントハンドラが実行される』という意味なら、AutoPostBackプロパティの値を確認してください。
参考:TextBox.AutoPostBack プロパティ

また、
「Button_clickイベントのみ発生させたい」のであれば、TextChangedのイベントハンドラを設定しなければよいのでは?
イベントを発生させないようにはできないと思います。
※上記AutoPostBackをFalseに設定した場合でも、ボタンクリック等のPostBack時にはイベントが発生しますので。
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2004-05-09 15:20
テキストボックスの内容を変更した後カーソルを他に移動するとポストバックしてしまうのであれば、それはHeさんのおっしゃっているようにAutoPostBackがTrueに設定されているからです。

そうでなければ、サーバー側でテキストボックスのTextChangedイベントの後にボタンのClickイベントが起きているはずです。
確かめてみてください。
taro
ベテラン
会議室デビュー日: 2003/08/06
投稿数: 55
投稿日時: 2004-05-09 15:27
Heさま さっそくのご返事ありがとうございます。

説明不足で申し訳ありません。
追加説明させていただきますと以下のようになります。

この処理というのが、
@テキストボックスに番号が入力された時にその番号が「000」ならばラベルにOK、それ以外の数字ならばNGと表示する。(テキストチェンジイベント)
Aボタン押下時にテキストボックスに入力された番号が「000」かどうかチェックし、「000」ならば他のページに遷移する。(ボタンクリックイベント)

の2つの処理からなっておりまして、テキストに番号を入力してフォーカスをテキストから
動かさずにボタンを押下すると、@の処理のみ実行してAの処理は実行しない状態になってしまいます。(ラベルにOKorNGと表示されるのみ)

He
大ベテラン
会議室デビュー日: 2002/12/18
投稿数: 141
投稿日時: 2004-05-09 16:10
引用:

taroさんの書き込み (2004-05-09 15:27) より:
1. テキストボックスに番号が入力された時にその番号が「000」ならばラベルにOK、それ以外の数字ならばNGと表示する。(テキストチェンジイベント)
2. ボタン押下時にテキストボックスに入力された番号が「000」かどうかチェックし、「000」ならば他のページに遷移する。(ボタンクリックイベント)


おそらく、2でボタンを押せていないのだと思います。(テキストボックスのポストバック処理が実行されているため)
ちょっと長いですが、動作を確認してみてください。ボタンを押せていれば、alertが表示されます。
コード:
<%@ Page Language="VB" %>
<script runat="server">

  Sub Page_Load(sender As Object, e As EventArgs)
      Button1.Attributes("onclick") = "alert(""Click!"")"
  End Sub
  
  Sub TextBox1_TextChanged(sender As Object, e As EventArgs)
    Dim result as String = ""
    If (TextBox1.Text = "000") Then
      result = "OK"
    Else
      result = "NG"
    End If
      Label1.Text = result
  End Sub
  
  Sub Button1_Click(sender As Object, e As EventArgs)
    Label2.Text = "Clicked"
  End Sub
  
  Sub Button2_Click(sender As Object, e As EventArgs)
    Label1.Text = ""
    Label2.Text = ""
  End Sub

</script>
<html>
<head>
</head>
<body>
  <form runat="server">
    <asp:TextBox id="TextBox1" runat="server" 
     AutoPostBack="True" OnTextChanged="TextBox1_TextChanged" />
    <asp:Label id="Label1" runat="server"></asp:Label>
    <asp:Label id="Label2" runat="server"></asp:Label>
    <asp:Button id="Button1" onclick="Button1_Click" runat="server" Text="実行" />
    <asp:Button id="Button2" onclick="Button2_Click" runat="server" Text="リセット" />
  </form>
</body>
</html>



で、対処方法ですが、わかりませんでした。私は基本的にAutoPostBackを使用しないもので。
# まさにこのような状態を懸念して。ASP.NETが生成するクライアントスクリプトはコントロールしづらいので。
# 余談ですが、同様の理由でValidatorのEnableClientScriptも使用しません。

なにかわかったらまた投稿します。おやくにたてず申し訳ないです。
taro
ベテラン
会議室デビュー日: 2003/08/06
投稿数: 55
投稿日時: 2004-05-09 16:59
Heさま ご返事ありがとうございました。

いただいたコードを実行した結果、alert(メッセージボックス)は表示されませんでした。

こちらでももう少し考えたいと思っております。
ありがとうございました。
1

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