I have a simple form with jquery steps and jquery validate.
I have a lot of field with specific format (example: only accepting one of these numbers /^(6|8|10|12)$/)
.
I'm using regex to check input format so that user know there is something wrong. For the moment, the wrong format just take the red color but by pressing next, the user can go to the next step.
Now I want to forbid next step if the input is not on the right format.
Here is the pen to illustrate the form https://codepen.io/zounars/pen/MZYxKB
<!-- Thanks to Pieter B. for helping out with the logistics -->
<div class="container">
<form id="contact" action="#">
<div>
<h3>Account</h3>
<section>
<label for="userName">User name *</label>
<input id="userName" name="userName" type="text" class="required">
<label for="specialNumber">Special number *</label>
<input id="specialNumber" name="specialNumber" type="text" class="required">
<p>(*) Mandatory</p>
</section>
<h3>Profile</h3>
<section>
<label for="name">First name *</label>
<input id="name" name="name" type="text" class="required">
<label for="surname">Last name *</label>
<input id="surname" name="surname" type="text" class="required">
<p>(*) Mandatory</p>
</section>
<h3>Hints</h3>
<section>
<ul>
<li>Foo</li>
<li>Bar</li>
<li>Foobar</li>
</ul>
</section>
<h3>Finish</h3>
<section>
<input id="acceptTerms" name="acceptTerms" type="checkbox" class="required"> <label for="acceptTerms">I agree with the Terms and Conditions.</label>
</section>
</div>
var form = $("#contact");
form.validate({
errorPlacement: function errorPlacement(error, element) { element.before(error); },
rules: {
confirm: {
equalTo: "#password"
}
}
});
form.children("div").steps({
headerTag: "h3",
bodyTag: "section",
transitionEffect: "slideLeft",
onStepChanging: function (event, currentIndex, newIndex)
{
form.validate().settings.ignore = ":disabled,:hidden";
return form.valid();
},
onFinishing: function (event, currentIndex)
{
form.validate().settings.ignore = ":disabled";
return form.valid();
},
onFinished: function (event, currentIndex)
{
alert("Submitted!");
}
});
$('#specialNumber').on('keyup', function (e) {
if (!this.value.match(/^(6|8|10|12)$/)) {
$(this).addClass('error-color'); // adding error class
} else {
$(this).removeClass('error-color'); // remove error class
}
});