1

我有这个控制:

在此处输入图像描述

我正在尝试创建一种验证,即每当用户向 TextBox 输入文本时,“添加”按钮将被启用,当文本为“”(空)时,“添加”按钮将被禁用。我不想使用验证器。

这是代码:

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 的事件。为了触发事件,您必须将AutoPostBackTextBox 的属性设置为 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

您需要使用 Javascript 来完成此操作,因为 ASP.NET 无法执行此类客户端修改。想想看……每次你在文本框中按下一个字母,它就必须回发并刷新页面,以确定文本框是否为空。这是 ASP.NET 与 Winforms/WPF 不同的一种方式。

于 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 回答