I am using template wizard form plugin.
The select gets its options values dynamically appended on the page load event. I have added required class to select
, when I click next button without filling any values in all textboxes and keeping select default (0), all the default validation
"This feild is required."
of this plugin appears on the top of all textboxes but does not work for select
(category field).
HTML:
<form class="form-horizontal" id="form" onsubmit="return validateform()" method='post' action="./?action=savebookdetails" class="wizard-big">
<h1>Book Details</h1>
<fieldset>
... ...
<div class="form-group">
<label class="col-sm-3 control-label">ISBN *</label>
<div class="col-sm-9">
<input name="isbn" id="isbn" value="<?php if($result != '') echo $result->isbn; ?>" type="text" class="form-control only-numbers required" maxlength="11">
</div>
</div>
<div class="form-group" id="dob">
<label class="col-sm-3 control-label">Category *</label>
<div class="col-sm-9">
<select class="form-control required" onchange="fetchsubcategories(this.value)" id="category" name="category">
<option value="0">Select</option>
</select>
</div>
</div>
</fieldset>
</form>
In jQuery:
$("#wizard").steps();
$("#form").steps({
bodyTag: "fieldset",
onStepChanging: function(event, currentIndex, newIndex) {
if (currentIndex > newIndex) {
return true;
}
var form = $(this);
if (currentIndex < newIndex) {
$(".body:eq(" + newIndex + ") label.error", form).remove();
$(".body:eq(" + newIndex + ") .error", form).removeClass("error");
}
form.validate().settings.ignore = ":disabled,:hidden";
return form.valid();
},
onStepChanged: function(event, currentIndex, priorIndex) {
if (currentIndex === 2 && priorIndex === 3) {
$(this).steps("previous");
}
},
onFinishing: function(event, currentIndex) {
var form = $(this);
form.validate().settings.ignore = ":disabled";
return form.valid();
},
onFinished: function(event, currentIndex) {
var form = $(this);
form.submit();
},
onCanceled: function(event) {
window.history.go(-1);
}
}).validate({
errorPlacement: function(error, element) {
element.before(error);
}
});