Glenn Slaven
Glenn Slaven

Reputation: 34193

The jQuery Validation `valid()` method returns 0 when required is not true

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>

Upvotes: 3

Views: 19416

Answers (3)

Carlos Ruana
Carlos Ruana

Reputation: 2278

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

Upvotes: 0

user183022
user183022

Reputation:

I think this works:

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

Upvotes: 2

Christian C. Salvad&#243;
Christian C. Salvad&#243;

Reputation: 827366

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() == "";

Upvotes: 7

Related Questions