在使用javascript复选框的检查事件中启用/禁用放置在gridview中的文本框

时间:2011-06-07 05:20:21

标签: javascript asp.net

我有gridview,其中包含不同项目模板字段中的复选框和文本框。加载网格时,文本框将被删除。现在我想要的是,当用户检查任何复选框时,应该启用该特定行中受尊重的文本框。当用户取消选中已选中的复选框时,文本框将再次清除并禁用。现在,当用户点击“保存”按钮时,javascript应该验证所有选中了其所选复选框的文本框。

验证是

(1)文本框不应为空

(2)它应该只允许字符和空格(我想在该文本框中输入名称)。如何编写java脚本来执行所有这些任务。我是javascript的新手,完全没有意识到它的概念。

提前致谢

1 个答案:

答案 0 :(得分:0)

<script type="text/javascript">
    var nameRegex = /^[a-zA-Z ]+$/;
    function validateName(sender, args) {
        args.IsValid = nameRegex.test(args.Value);
    }
</script>


<asp:GridView runat="server" ID="GridView1" AutoGenerateColumns="false" DataKeyNames="Id" >
    <Columns>
        <asp:TemplateField >
            <ItemTemplate>
                <asp:CheckBox runat="server" AutoPostBack="true" OnCheckedChanged="SelectRow"  />
            </ItemTemplate>
        </asp:TemplateField>
        <asp:BoundField DataField="Id" HeaderText="Id" />
        <asp:TemplateField HeaderText="Name" >
            <ItemTemplate>
                <asp:TextBox runat="server" ID="NameTextBox" Enabled="false" Text='<%# Eval("Name") %>' />
                <asp:CustomValidator runat="server" ID="NameValidator" ControlToValidate="NameTextBox"
                    ValidateEmptyText="true" Text="!" Display="Static" Enabled="false"
                    ClientValidationFunction="validateName" OnServerValidate="ValidateName" />
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>


public partial class WebForm1 : System.Web.UI.Page
{
    private static readonly Regex nameRegex = new Regex("^[a-zA-Z ]+$");

    protected void ValidateName(object source, ServerValidateEventArgs args)
    {
        args.IsValid = nameRegex.IsMatch(args.Value);
    }

    protected void SelectRow(object sender, EventArgs e)
    {
        Page.Validate();
        var checkBox = (CheckBox)sender;

        if (Page.IsValid || !checkBox.Checked)
        {
            var textBox = (TextBox)checkBox.NamingContainer.FindControl("NameTextBox");
            var nameValidator = (CustomValidator)checkBox.NamingContainer.FindControl("NameValidator");

            textBox.Enabled = checkBox.Checked;
            nameValidator.Enabled = checkBox.Checked;
            if (!checkBox.Checked)
                textBox.Text = "";
        }
        else
        {
            checkBox.Checked = false;
        }
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            GridView1.DataSource = from item in Enumerable.Range(0, 10)
                                   select new
                                   {
                                       Id = item,
                                       Name = "" 
                                   };
            GridView1.DataBind();
        }
    }
}