【问题标题】:Override jQuery validate default settings in MVC4覆盖 jQuery 验证 MVC4 中的默认设置
【发布时间】:2013-01-25 14:16:48
【问题描述】:

要覆盖查询验证插件,在plaugsin document,推荐的方式是:

$(".selector").validate({
    invalidHandler: function(form, validator) {
      var errors = validator.numberOfInvalids();
      if (errors) {
        var message = errors == 1
          ? 'You missed 1 field. It has been highlighted'
          : 'You missed ' + errors + ' fields. They have been highlighted';
        $("div.error span").html(message);
        $("div.error").show();
      } else {
        $("div.error").hide();
      }
    }
})

但是,它在带有 jquery-1.7.1.js 的 MVC4 中不起作用。似乎 jquery.validate.unobtrusive.js 阻止调用覆盖句柄。如果不包含此文件,则调用覆盖句柄并显示消息。有人有同样的问题吗?

【问题讨论】:

标签: jquery asp.net-mvc-4 jquery-validate unobtrusive-validation


【解决方案1】:

我终于按照Bruce 的建议让它工作了。诀窍是在连接您的自定义处理程序之前删除旧处理程序。您可以以相同的方式覆盖其他设置。 Microsoft 应该加快修复其 jquery.validate.unobtrusive.js 以与 jquery.validate 一起使用。已举报unobtrusive [version="2.0.20710.0"] breaks jquery-1.9.0

$('form').each(function() {
    $(this).unbind("invalid-form.validate"); // remove old handler!!!!
    $(this).bind("invalid-form.validate", function(e, validator) {
        //alert("ok");
        var errors = validator.numberOfInvalids();
        if (errors) {
            var message = errors == 1
                ? 'You missed 1 field. It has been highlighted'
                : 'You missed ' + errors + ' fields.  They have been highlighted';
            $("div.error span").html(message);
            $("div.error").show();
        } else {
            $("div.error").hide();
        }
    });
});

【讨论】:

    【解决方案2】:

    这不起作用的原因是验证器已经由不显眼的插件创建,所以当你调用时

    $(".selector").validate({..})
    

    您只需取回已创建的验证器实例,您的选项不会被应用。但是我认为您可以通过这种方式更改设置。

    <script>
        $(function () {  
    
            // get the validator instance
            var v = $('form').validate();
    
            // overwrite the invalidHandler with your own function
            v.settings.invalidHandler = function(form, validator) {
              // your stuff here
            };
        });
    </script>
    

    请注意,这会覆盖“不显眼”的 invalidHandler 函数,因此您不会获得“不显眼”功能的那部分。

    【讨论】:

    • 感谢您的意见。但是,它对我不起作用。未调用自定义处理程序。
    猜你喜欢
    • 2020-01-17
    • 1970-01-01
    • 2014-04-04
    • 1970-01-01
    • 1970-01-01
    • 2022-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多