Fixing jQuery Validation with changing validators

Got jQuery Validation running, and now I know that it requires every input and select to have a name property; otherwise it will simply ignore your validation rules:

jquery.validate.js line 130:
staticRules[element.name] = existingRules;

It will however still apply the CSS-based rules, so finding that out was a bit tricky.

Next stop: I create a dialog with a dropdown to select some sort of object type, each object type having different attributes and different validation rules.

Of course, the validation rules have to be re-defined every time the dropdown value changes. If there is already a validator defined on the form, you need to destroy the existing validator

var form = $('#myForm).get(0);
$.removeData(form, 'validator');

(found here)

Still, some mysterious bit of code still remains, as validation is still executed even though the validator had been deleted and the dropdown is ignored in the (non-existing?) validator:

Uncaught TypeError: Cannot read property 'settings' of undefined
 jquery.validate.js:315

says Chrome, and IE reports

Unable to get value of the property 'settings': object is null or undefined

The culprit is the method delegate() (line 313), which does not check whether a validator exists:

function delegate(event) {
  var validator = $.data(this[0].form, "validator"),
  eventType = "on" + event.type.replace(/^validate/, "");
  // this fixes handling the deleted validator:
  if (!validator) return;
  validator.settings[eventType] && validator.settings[eventType].call(validator, this[0], event);
}

5 thoughts on “Fixing jQuery Validation with changing validators

  1. I struggled with the settings is null or not an object error for a while on one of my validators. I searched around the internet and didn’t find the answer to the issue I was having. I also found that all the top results in Google are closed. I’m posting the answer here as it somewhat relates to your post. If you have an HTML5 form attribute on your elements, this might be the cause of the settings is null or not an object error in IE. IE does not support the HTML5 form attribute.

    • how do you fix it? I’m using the html5 form as well. I did try this change “if (!validator) return;” and it works but may not be the best resolution of it since it causes the validate script to have side effects like it does not trigger the “onkeyup” or “onblur” events at all. I’m clueless at this point so any insight from you will be really appreciate. Thanks for the info ;- )

Leave a comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.