【问题标题】:Validate asp:CheckBox control on client side using JavaScript and CustomValidator control使用 JavaScript 和 CustomValidator 控件在客户端验证 asp:CheckBox 控件
【发布时间】:2012-06-21 13:12:23
【问题描述】:

我有两个复选框。在提交表单之前,我需要检查是否至少检查了其中一项。

我在页面上有一个 CustomValidator。它调用一个用于服务器端验证的函数。我需要为客户端验证添加一个函数。

客户端函数应该用 JavaScript 编写。

(我不知道这里是否有所不同,但页面上还有其他用户控件,例如 textBoxes,它们使用其他非自定义验证器)。

这是复选框和自定义验证器控件:

<tr>
    <td colspan="3">
        <asp:CheckBox id="EmailCourse" name="EmailCourse" runat="server" />
         Email course
    </td>
</tr>
<tr>
    <td colspan="3">
        <asp:CheckBox name="SpecialReport" id="SpecialReport" runat="server" />
            Special report
    </td>
</tr>
<tr>
    <td colspan="3">
        <asp:CustomValidator id="CustomValidator1" runat="server" ErrorMessage="No checkbox checked" CssClass="error" ClientValidationFunction="validateCheckboxes_ClientValidate" OnServerValidate="validateCheckBoxes_ServerValidate"></asp:CustomValidator>
    </td>
</tr>

这是服务器端验证调用的函数:

protected void validateCheckBoxes_ServerValidate(object source, ServerValidateEventArgs args)
    {
        if (!EmailCourse.Checked && !SpecialReport.Checked)
            args.IsValid = false;
        else
            args.IsValid = true;
    }

我尝试编写客户端函数 validateCheckboxes_ClientValidate:

    <script type="text/javascript" language="javascript">

        function validateCheckboxes_ClientValidate(oSrc, args) {
            alert("inside function");
            var ec = document.getElementById("EmailCourse");
            var sr = document.getElementById("SpecialReport");
            if (!sr.checked && !ec.checked) {
                alert("hi it works");
                args.IsValid = false;
            }
            else {
                alert("one of them is checked");
                args.IsValid = true;
            }
        }
</script> 

这不起作用。调用该函数,显示第一个警报,但是……就是这样! IF 语句不起作用。

怎么会?我需要做些什么来更改它,以便该函数实际验证复选框并且表单在无效时不会提交?

【问题讨论】:

    标签: javascript asp.net checkbox customvalidator client-side-validation


    【解决方案1】:

    我尝试了您的代码,但它在不使用母版页的页面中确实可以正常工作。

    可能有两个可能的问题,一个是下面列出的母版页更改了生成的最终标记中的 ID,如下所示,在这种情况下,您必须在 JS 中使用 MainContent_EmailCourse 作为 ID

    <td colspan="3">
        <span name="EmailCourse"><input id="MainContent_EmailCourse" type="checkbox" name="ctl00$MainContent$EmailCourse" /></span>
         Email course
    </td>
    

    特别报道

    或者它可能是特定于浏览器的问题。

    【讨论】:

    • 哇!有效! ID,当我查看“页面源”时,是 ContentPlaceHolder1_Form1_SpecialReport 和 ContentPlaceHolder1_Form1_EmailCourse。怎么会这样?最重要的是:这适用于所有浏览器吗?谢谢!
    • 很酷,看这篇文章了解更多codeproject.com/Articles/22111/… 而且你的JS看起来很简单,它应该适用于所有浏览器
    猜你喜欢
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-16
    • 1970-01-01
    相关资源
    最近更新 更多