【问题标题】:Disable RequiredFieldValidator when ControlToValidate is not visible in client当 ControlToValidate 在客户端不可见时禁用RequiredFieldValidator
【发布时间】:2014-03-31 15:47:39
【问题描述】:

我有一系列 ASP.Net RequiredFieldValidators,连同它们的相关控件,隐藏客户端 - 它们被封装在一个 div 中,我使用 jQuery 的 .toggle() 根据需要隐藏/显示 div:

<div id="reference" style="display: none">
<asp:TextBox runat="Server" id="txt"></asp:TextBox>
<asp:RequiredFieldValidator runat="Server" id="rfv" ControlToValidate="txt"></asp:RequiredFieldValidator>
</div>

(简体)

按预期关闭 div 会添加“display: none”样式。 RequiredFieldValidator 仍然会触发,因为虽然它是隐藏的,但它在页面中仍然是活动的。我需要禁用在客户端中不可见的验证器。

使用 jQuery,我怎样才能找到所有要验证的控件/验证器,它们的父 div 为“display: none”,并禁用它们?

谢谢

【问题讨论】:

    标签: jquery asp.net validation


    【解决方案1】:
    ValidatorEnable(ValidatorName, false);
    

    ASP.NET Validation in Depth - 查看 Client Side API 子标题。

    在你的情况下:

    <script type='text/javascript'>
        ValidatorEnable('<%=rfv.ClientID %>', false);
    </script>
    

    【讨论】:

      【解决方案2】:

      典型。我发布了我的问题,然后在几分钟后自己解决了。这就是我最终得到的结果:

      function ConfigureValidators() {
          if (typeof Page_Validators != 'undefined') {
              for (i = 0; i <= Page_Validators.length; i++) {
                  if (Page_Validators[i] != null) {
                      var visible = $('#' + Page_Validators[i].controltovalidate).parent().is(':visible');
                      Page_Validators[i].enabled = visible;
                  }
              }
          };
      }
      

      【讨论】:

      • 虽然我的代码确实会导致验证器立即触发/验证!?
      • 嗯... ValidatorEnable() 似乎调用了 ValidatorValidate()。
      • 更新了我的代码块,使用 .enabled 代替对 ValidatorEnabled() 的调用。它现在按预期工作。
      【解决方案3】:

      如果您希望使用后端验证,请检查一下,它对我有用。

      Requiredfieldvalidator.Enabled = False
      

      我正在工作的项目的所有字段都可见,但根据某些条件,必须禁用验证。

      Reference

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多