jQuery Validation: $.data($('form')[0], 'validator').settings returns undefined

前端 未结 5 628
伪装坚强ぢ
伪装坚强ぢ 2021-02-05 22:35

I have an ASP.Net MVC Project and I am using unobtrusive jQuery Validation. to add validation when an element loses focus, I am calling

$(document).ready(function         


        
5条回答
  •  南方客
    南方客 (楼主)
    2021-02-05 23:06

    I just upgraded to Microsoft.jQuery.Unobtrusive.Validation.3.2.0 package. I came across the same problem. Is it possible that you also upgraded to the same version?

    If so, I might offer my two cents :). After a bit of debugging I noticed that the following change was made in jquery.validate.unobtrusive.js:

    Previous version:

        var $forms = $(selector)
            .parents("form")
            .andSelf()
            .add($(selector).find("form"))
            .filter("form");
    

    New version:

            $forms = $selector.parents()
                              .addBack()
                              .filter("form")
                              .add($selector.find("form"))
                              .has("[data-val=true]"); // key point!
    

    The key seems to be: the has("[data-val=true]"). That is, if your form doesn't have any descendents (like an input element) with that attribute value, it will not be parsed by the validation helper and no 'validator' data will get assigned to that form element. You'll then get this 'undefined' error if you try to access the validator of that form at a later stage.

    In my case, the forms for which this was happening didn't actually use any validation, hence they didn't have this attribute. I was then able to change my custom validator logic to first check if the validator exists before changing validator settings.

    Hope that helps.

提交回复
热议问题