使用jQuery / javascript启用 - 但不激活 - 必需的验证器

时间:2011-06-14 13:27:23

标签: javascript jquery asp.net requiredfieldvalidator

我有一个可能包含10个字段的表单。其中一个字段是一个复选框,默认未选中,如果选中该复选框,则表单上的许多字段仅启用+必需。我已经成功地找到了如何调用ValidatorEnable(requiredFieldValidator,true)来处理这个问题(我已经检查了很多关于这个主题的StackOverflow问题)。

 function toggleStatus() {
          if ($('#ctl00_main_chkContactMe').is(':checked')) {
              $('#elementsToOperateOn :input').removeAttr('disabled');
              $('#elementsToOperateOn label').removeClass('off');
              ValidatorEnable($("[id$=RequiredFieldValidator1]")[0], true);
              ValidatorEnable($("[id$=RequiredFieldValidator2]")[0], true);
          } else {
              $('#elementsToOperateOn :input').attr('disabled', true);
              $('#elementsToOperateOn label').addClass('off');
              ValidatorEnable($("[id$=RequiredFieldValidator1]")[0], false);
              ValidatorEnable($("[id$=RequiredFieldValidator2]")[0], false);
          }
      }

然而,我遇到了一个问题,我还没有看到。当我的用户选中该框并且现在已启用并且需要字段时,我的验证器会立即触发其“此字段是必需的”消息。这是在用户甚至有机会输入任何内容之前,所以这不是一个非常好的用户体验。我可以告诉验证器,以便它知道,即使我启用它,“此字段还没有完全集中,所以在有人故意将其留空之前不要显示错误消息”?< / p>

3 个答案:

答案 0 :(得分:12)

我遇到了同样的问题并使用此代码解决了它:

var myValidator = document.getElementById('<%=myValidator.ClientID %>');
ValidatorEnable(myValidator, true);
myValidator.isvalid = true;
ValidatorUpdateDisplay(myValidator);

第三行可能看起来有点奇怪,但验证器稍后会在任何更改或发布页面时进行验证。

你也可以尝试这个功能:

function myValidatorEnabler(validator, enable) {   
    validator.enabled = enable;
    ValidatorUpdateDisplay(validator);
}

答案 1 :(得分:0)

请不要在提交之前启用它们,我认为您应该能够在提交时启用它们而不是使用通过使用RegisterOnSubmitStatement调用的javascript函数,它将在验证之前触发。

http://msdn.microsoft.com/en-us/library/system.web.ui.clientscriptmanager.registeronsubmitstatement.aspx

这样可以节省您的回复费用。

答案 2 :(得分:0)

默认情况下,您的必填字段验证器已启用(如果没有,则启用它)。因此,只使用那些需要它来禁用的条件,你就完成了。