3

I'm using the jQuery Validation plugin and I've got a textbox with the class digits to force it to be digits only, but not required. When I call validate on the form it works fine, but if I call valid() on the textbox when it's empty, it returns 0, despite no error message showing and required not being set.

Does anyone know why it would be returning this for a seemingly valid input value?

Here is the code:

<input type="text" value="" name="kiloMetresTravelled" id="kiloMetresTravelled" class="digits"/>

and the script

<script type="text/javascript'>
 var isvalid = jQuery('#kiloMetresTravelled').valid(); 
 //isvalid == 0 when kiloMetresTravelled is blank
</script>
Glenn Slaven
  • 33,720
  • 26
  • 113
  • 165

3 Answers3

7

Check this, from the documentation:

Makes "field" required and digits only.

You could do something like this:

var isValid = jQuery('#kiloMetresTravelled').valid() || jQuery('#kiloMetresTravelled').val() == "";
Christian C. Salvadó
  • 807,428
  • 183
  • 922
  • 838
  • 1
    Doesn't it only say 'makes the element require digits only'. They added a 'required' rule as well – Glenn Slaven Jan 27 '09 at 03:36
  • The example adds the required rule into the mix: this answer is misleading. What actually happens is that since there is no required rule on the field, the internal 'check' method returns undefined for the field in question. Why this is so is a mystery to me. Note that the code above works but (a) the reason is wrong, and (b) it will only work for a single element under test. – JT. Dec 10 '11 at 13:41
2

I think this works:

var e="#whatever";
var isValid = $(e).valid() || $(e).val()== "" && !$(e).hasClass('required');
0

There's a bug on the library when rule methods check for optional fields with "this.optional(element)". When the field is empty this.optional returns "dependency-mismatch" and the validation method returns "undefined" marking the field as invalid.

Full explanation here:

https://github.com/jzaefferer/jquery-validation/issues/481

Carlos Ruana
  • 2,138
  • 1
  • 15
  • 14