formvalidation
Version:
The best jQuery plugin to validate form fields. Support Bootstrap, Foundation, Pure, SemanticUI, UIKit and custom frameworks
230 lines (217 loc) • 10.4 kB
HTML
<html>
<head>
<title>FormValidation demo</title>
<link rel="stylesheet" href="../vendor/bootstrap/css/bootstrap.css"/>
<link rel="stylesheet" href="../dist/css/formValidation.css"/>
<script type="text/javascript" src="../vendor/jquery/jquery.min.js"></script>
<script type="text/javascript" src="../vendor/bootstrap/js/bootstrap.min.js"></script>
<script type="text/javascript" src="../dist/js/formValidation.js"></script>
<script type="text/javascript" src="../dist/js/framework/bootstrap.js"></script>
</head>
<body>
<div class="container">
<div class="row">
<section>
<div class="col-xs-8 col-xs-offset-2">
<div class="page-header">
<h2>Tab example</h2>
</div>
<ul class="nav nav-tabs">
<li class="active"><a href="#info-tab" data-toggle="tab">Information <i class="glyphicon"></i></a></li>
<li><a href="#address-tab" data-toggle="tab">Address <i class="glyphicon"></i></a></li>
</ul>
<form id="accountForm" method="post" class="form-horizontal" action="target.php" style="margin-top: 20px;">
<div class="tab-content">
<div class="tab-pane active" id="info-tab">
<div class="form-group">
<label class="col-xs-3 control-label">Full name</label>
<div class="col-xs-5">
<input type="text" class="form-control" name="fullName" />
</div>
</div>
<div class="form-group">
<label class="col-xs-3 control-label">Company</label>
<div class="col-xs-5">
<input type="text" class="form-control" name="company" />
</div>
</div>
<div class="form-group">
<label class="col-xs-3 control-label">Job title</label>
<div class="col-xs-5">
<input type="text" class="form-control" name="jobTitle" />
</div>
</div>
<div class="form-group" id="emailRow">
<label class="col-xs-3 control-label">Email</label>
<div class="col-xs-5">
<input type="text" class="form-control" name="email[]" />
</div>
<div class="col-xs-4">
<button type="button" class="btn btn-default btn-sm addButton">Add</button>
</div>
</div>
</div>
<div class="tab-pane" id="address-tab">
<div class="form-group">
<label class="col-xs-3 control-label">Address</label>
<div class="col-xs-5">
<input type="text" class="form-control" name="address" />
</div>
</div>
<div class="form-group">
<label class="col-xs-3 control-label">City</label>
<div class="col-xs-5">
<input type="text" class="form-control" name="city" />
</div>
</div>
<div class="form-group">
<label class="col-xs-3 control-label">Country</label>
<div class="col-xs-5">
<select class="form-control" name="country">
<option value="">Select a country</option>
<option value="FR">France</option>
<option value="DE">Germany</option>
<option value="IT">Italy</option>
<option value="JP">Japan</option>
<option value="RU">Russian</option>
<option value="US">United State</option>
<option value="GB">United Kingdom</option>
<option value="other">Other</option>
</select>
</div>
</div>
</div>
</div>
<div class="form-group">
<div class="col-xs-5 col-xs-offset-3">
<button type="submit" class="btn btn-primary">Validate</button>
</div>
</div>
</form>
</div>
</section>
</div>
</div>
<div class="form-group hide" id="emailTemplate">
<div class="col-xs-offset-3 col-xs-5">
<input class="form-control" type="text" name="email[]" />
</div>
<div class="col-xs-4">
<button type="button" class="btn btn-default btn-sm removeButton">Remove</button>
</div>
</div>
<script type="text/javascript">
$(document).ready(function() {
$('#accountForm')
.formValidation({
excluded: [':disabled'],
icon: {
valid: 'glyphicon glyphicon-ok',
invalid: 'glyphicon glyphicon-remove',
validating: 'glyphicon glyphicon-refresh'
},
fields: {
fullName: {
validators: {
notEmpty: {
message: 'The full name is required'
}
}
},
company: {
validators: {
notEmpty: {
message: 'The company name is required'
}
}
},
jobTitle: {
validators: {
notEmpty: {
message: 'The company name is required'
}
}
},
'email[]': {
validators: {
notEmpty: {
message: 'The email address is required'
},
emailAddress: {
message: 'The email address is not valid'
}
}
},
address: {
validators: {
notEmpty: {
message: 'The address is required'
}
}
},
city: {
validators: {
notEmpty: {
message: 'The city is required'
}
}
},
country: {
validators: {
notEmpty: {
message: 'The city is required'
}
}
}
}
})
.on('err.form.fv', function(e) {
var $form = $(e.target),
fv = $form.data('formValidation'),
$invalidFields = fv.getInvalidFields();
for (var i = 0; i < $invalidFields.length; i++) {
var $field = $invalidFields.eq(i),
autoFocus = fv.isOptionEnabled($field.attr('data-fv-field'), 'autoFocus');
if (autoFocus) {
// Activate the tab containing the field if exists
var $tabPane = $field.parents('.tab-pane'), tabId;
if ($tabPane && (tabId = $tabPane.attr('id'))) {
$('a[href="#' + tabId + '"][data-toggle="tab"]').tab('show');
}
break;
}
}
})
.on('status.field.fv', function(e, data) {
var validator = data.fv,
$tabPane = data.element.parents('.tab-pane'),
tabId = $tabPane.attr('id');
if (tabId) {
var $icon = $('a[href="#' + tabId + '"][data-toggle="tab"]').parent().find('i');
// Add custom class to tab containing the field
if (data.status == validator.STATUS_INVALID) {
$icon.removeClass('glyphicon-ok').addClass('glyphicon-remove');
} else if (data.status == validator.STATUS_VALID) {
$icon.removeClass('glyphicon-ok glyphicon-remove');
var isValidTab = validator.isValidContainer($tabPane);
if (isValidTab !== null) {
$icon.addClass(isValidTab ? 'glyphicon-ok' : 'glyphicon-remove');
}
}
}
});
$('.addButton').on('click', function() {
var $template = $('#emailTemplate'),
$row = $template.clone().removeAttr('id').insertAfter('#emailRow').removeClass('hide'),
$el = $row.find('input').eq(0);
$('#accountForm').formValidation('addField', $el);
$row.on('click', '.removeButton', function(e) {
$('#accountForm').formValidation('removeField', $el);
$row.remove();
});
});
});
</script>
</body>
</html>