必需的字段验证器在禁用的文本框上错误地验证失败

时间:2009-10-07 13:07:23

标签: javascript jquery requiredfieldvalidator

当关联的文本框被禁用时(文本框是否包含文本),似乎总是要触发必填字段验证器。

启用文本框后,验证程序的行为正确。

有人可以告诉我为什么吗?

我尝试使用ValidatorEnable禁用所需的字段验证器,但这似乎没有区别。

以下是页面中的相关HTML(缩减):

    <tr id="trBrokerNetID" runat="server">
    <td>
        <cc1:mitextbox id="txtBrokerNetID" runat="server" cssclass="bodytext" width="220px" maxlength="20" onBlur="JavaScript:CheckBrokerBranch(false);"></cc1:mitextbox>
        <asp:requiredfieldvalidator id="rfvBrokerNetID" runat="server" width="1px" errormessage="BrokerNetID - Please supply a value" controltovalidate="txtBrokerNetID">*</asp:requiredfieldvalidator>
    </td>
</tr>

感激地收到任何想法。

3 个答案:

答案 0 :(得分:1)

ASP.NET的验证器以神秘的方式工作:D

首先,使用ASP.NET控件的id在jQuery中访问它是危险的。 如果将控件放在转发器中或将页面包装在母版页中,则html元素的id将与您指定的id不同。使用class来代替访问元素。

如果ASP.NET验证程序希望启用该字段,那么您必须尝试其他方法。 我的建议是:

1。 在文本框中添加一个类,使其看起来已禁用:

$("#txtBrokerNetID").addClass("thisClassMakesItLookDisabled");

2。 添加一个将焦点检查到文本框的事件,如果有焦点则将其模糊:

$("#txtBrokerNetID").focus(function() {
  $(this).blur();
});

现在该字段的行为就像它被禁用并且验证器一样。

答案 1 :(得分:1)

现在我不知道的是,当在客户端上禁用控件时,它不会包含在回发中。

这就是服务器端验证被解雇的原因。就其而言,控制权是空的。

soolution是使用readOnly属性而不是disabled属性。

现在要弄清楚如何设置控件的样式,使其具有相同的外观,就像它被禁用一样。

答案 2 :(得分:0)

您可以选择的一个选项是设置ValidationGroup而不是表单使用的ValidationGroup,然后在需要时验证表单调用Page_ClientValidate('text_validation_group')。这样客户端验证就不会妨碍。