【问题标题】:ASP.net MVC 3 jQuery Validation; Disable Unobtrusive OnKeyUp?ASP.net MVC 3 jQuery 验证;禁用不显眼的 OnKeyUp?
【发布时间】:2011-12-22 18:55:52
【问题描述】:

有没有办法禁用某个验证器(信用卡)的 jQuery 验证,以便它只发生在 onblur,而不是 onkeyup?

根据 jQuery Validator 文档,我认为我可以这样做:

$(function () {
    $("[data-val-creditcard]").validate({
        onkeyup: false
    })
});

但是,它似乎不起作用。

我还尝试在我的验证器上执行以下操作:

public class CreditCardValidator : DataAnnotationsModelValidator<CreditCardAttribute>
{
    string _message;

    public CreditCardValidator(ModelMetadata metadata, ControllerContext context, CreditCardAttribute attribute)
        : base(metadata, context, attribute)
    {
        _message = attribute.ErrorMessage;
    }

    public override IEnumerable<ModelClientValidationRule> GetClientValidationRules()
    {
        var rule = new ModelClientValidationRule
        {
            ErrorMessage = _message,
            ValidationType = "creditcard"
        };
        rule.ValidationParameters.Add("onkeyup", false);
        return new[] { rule };
    }
}

它也不起作用,但我只是在尝试正确使用 ValidationParameters。

在表单中输入信用卡号并让它随机地从无效变为有效,然后又变为无效,这有点烦人。

有什么想法吗?谢谢!

【问题讨论】:

    标签: jquery asp.net-mvc asp.net-mvc-3 jquery-validate


    【解决方案1】:

    好吧,伙计们,

    我遇到了同样的问题,发现了这个帖子:http://old.nabble.com/-validate--onkeyup-for-single-field-td21729097s27240.html

    这个想法基本上是覆盖keyup事件并返回false。因此,在您的具体情况下,您需要添加:

    $('#my-form').validate({
       rules: {
         [...]
       }
    } 
    // Disable keyup validation for credit card field
    $("[data-val-creditcard]").keyup(function() { return false } );
    

    您会看到您的信用卡字段仅在 blur 或 submit 上进行检查(但其余部分也在 keyup 上工作)。

    我一直在寻找相同的解决方案,发现这里的答案可以改进,所以我认为在这里分享它会很好。

    【讨论】:

    • 通过返回 false 来禁用 keyup 的绝妙技巧。
    • 这是我发现的唯一能够抑制 keyup 验证的方法。当我为了验证输入而进行 ajax 调用时,这太过分了。最后,我在 input 元素上设置了一个 data 属性,该属性由 input 元素的 onchange 事件的 ajax 结果控制。这允许 jquery validate 有一个简单的返回 true 或 false,同时仍然向服务器发出请求以进行数据库验证。
    • 有几个事件要抑制,我为它们做了一个简单的占位符var fnfalse = function(){ return false; },然后用它来阻止功能,$(element).keyup(fnfalse).blur(fnfalse).focusout(fnfalse);
    • 2018 年仍在工作!非常感谢,你拯救了我的一天。
    • 链接失效了:(
    【解决方案2】:

    $.validator.setDefaults 不适用于不显眼的验证,因为验证器是在内部初始化的。

    要更改使用不显眼验证的表单上的设置,您可以执行以下操作:

    var validator = $("form").data("validator");
    if (validator) {
        validator.settings.onkeyup = false; // disable validation on keyup
    }
    

    【讨论】:

    【解决方案3】:

    我意识到这是一篇旧帖子,但似乎没有一个回复能回答这个问题,

    如何禁用onkeyup和启用onblur?

    我一直在寻找这个,所以想我会分享答案。

    正如 Ben Foster 所说,onkeyup 可以通过执行以下操作来禁用

    var validator = $("form").data("validator");
    if (validator) {
        validator.settings.onkeyup = false;
    }
    

    要启用 onblur 验证,我们可以使用 onfocusout

    validator.settings.onfocusout = function(element)
    {
        $(element).valid();
    };
    

    所以我们禁用 onkeyup 和启用 onblur 的代码如下所示

    var validator = $("form").data("validator");
            if (validator)
            {
                validator.settings.onkeyup = false; 
                validator.settings.onfocusout = function(element)
                {
                    $(element).valid();
                };
            }
    

    【讨论】:

      【解决方案4】:

      不知道如何将其设置为特定字段,但您可以尝试禁用 keyup 验证(适用于所有字段):

      $.validator.setDefaults({
         onkeyup: false
      })
      

      【讨论】:

      • 是的,我看到了。我喜欢大多数字段,而不是信用卡字段或远程验证字段(我宁愿等到 onblur 访问网站,而不是每次更改字符时)。可能只是我必须忍受的限制。我可能会像你上面提到的那样做全局 setDefaults...
      • ...起初我使用 以确保文档和脚本已加载并准备好使用,但它不起作用。我不得不把它拉出​​来让它工作,例如:
      • 最终只是禁用了“onkeyup”
      【解决方案5】:

      你也可以使用类似上面的东西,

      $("form").validate({
          onfocusout: false,
          onkeyup: false
      });
      

      如果您有自定义规则,那么,

      $("form").validate({
          onfocusout: false,
          onkeyup: false,
          rules: {
              "name1": {
                  required: true,
                  email: true,
                  maxlength: 100
              },
              "name2": {
                  required: true,
                  number: true
              }
          }
      });
      

      jQuery 论坛中的This answer 对我帮助很大。

      【讨论】:

        【解决方案6】:

        您可以在 credit 字段的 onfocus 事件中将默认设置为关闭,然后在 onblur 中将其打开。看起来很hacky,但可以工作。

        【讨论】:

          猜你喜欢
          • 2011-07-09
          • 1970-01-01
          • 1970-01-01
          • 2021-10-06
          • 1970-01-01
          • 2011-06-28
          • 2011-09-20
          • 1970-01-01
          • 2011-09-17
          相关资源
          最近更新 更多