1

私はこのコントロールを持っています:

ここに画像の説明を入力

ユーザーがTextBoxにテキストを入力するたびに「追加」ボタンが有効になり、テキストが「」(null)の場合、「追加」ボタンが無効になる一種の検証を作成しようとしています。バリデーターを使用したくありません。

コードは次のとおりです。

protected void addNewCategoryTB_TextChanged(object sender, EventArgs e)
    {
        if (addNewCategoryTB.Text != "")
            addNewCategoryBtn.Enabled = true;
        else
            addNewCategoryBtn.Enabled = false;
    }

問題は、ユーザーがテキストを入力したときに、「追加」ボタンが無効から有効に変わらないことです(逆も同様です)...

何か案は?

4

3 に答える 3

6

Webフォームですか?Web フォームTextChangedでは、TextBox のイベントはデフォルトでは発生しません。イベントを発生させるにAutoPostBackは、TextBox のプロパティを true に設定する必要があります。

しかし、これは HTTP 投稿を実行します。これは厄介なことですが、それをUpdatePanel

よりエレガントなオプションは、jQuery を使用してそれを行うことです。jQuery でそれを行うには、次のようなコードが必要になります。

$(document).ready(function() {
    $("#<%= yourTextBox.ClientID %>").change(function() {
        var yourButton = $("#<%= yourButton.ClientID %>")

        yourButton.attr('disabled','disabled');
        yourButton.keyup(function() {
            if($(this).val() != '') {
                yourButton.removeAttr('disabled');
            }
        });

    });
});
于 2013-05-17T20:28:09.323 に答える
4

ASP.NET はこのようなクライアント側の変更を実行できないため、Javascript を使用してこれを実現する必要があります。考えてみてください...テキストボックス内の文字を押すたびに、テキストボックスが空かどうかを判断するために、ポストバックしてページを更新する必要があります。これは、ASP.NET が Winforms/WPF と異なる点の 1 つです。

于 2013-05-17T20:26:40.037 に答える
3

TextChangedイベントは毎回サーバーにポストバックします。そのようなタスクのリクエストを増やす必要はありません。

これを達成するためにjqueryを使用できます

var myButton = $("#btnSubmit");
var myInput=$("#name");
myButton.prop("disabled", "disabled");

myInput.change(function () {
  if(myInput.val().length > 0) {
    myButton.prop("disabled", "");
  } else {
    myButton.prop("disabled", "disabled");
  }
});

JS フィドルのデモ

サーバー コントロールを使用している場合は、要素 Id を処理する必要があります。そのために、ClientIDプロパティを使用または設定できますClientIdMode="Static"

于 2013-05-17T20:29:57.130 に答える