formvalidation
Version:
The best jQuery plugin to validate form fields. Support Bootstrap, Foundation, Pure, SemanticUI, UIKit and custom frameworks
217 lines (208 loc) • 9.53 kB
HTML
<html>
<head>
<title>FormValidation demo</title>
<link rel="stylesheet" href="../vendor/bootstrap/css/bootstrap.css"/>
<link rel="stylesheet" href="http://netdna.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.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>
<style type="text/css">
.form-control-feedback {
top: 10px;
}
</style>
</head>
<body>
<div class="container">
<div class="row">
<section>
<div class="col-sm-8 col-sm-offset-2">
<div class="page-header">
<h2>Credit card information</h2>
</div>
<form id="paymentForm" method="post" class="form-horizontal" action="target.php">
<div class="form-group">
<label class="col-sm-3 control-label">Card holder</label>
<div class="col-sm-5">
<input type="text" class="form-control" id="cardHolder" />
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">Credit card number</label>
<div class="col-sm-5">
<input type="text" class="form-control" id="ccNumber" />
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">Expiration</label>
<div class="col-sm-4">
<input type="text" class="form-control" placeholder="Month" data-stripe="exp-month" />
</div>
<div class="col-sm-4">
<input type="text" class="form-control" placeholder="Year" data-stripe="exp-year" />
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">CVV</label>
<div class="col-sm-2">
<input type="text" class="form-control cvvNumber" name="cvv" />
</div>
</div>
<div class="form-group">
<div class="col-sm-9 col-sm-offset-3">
<button type="submit" class="btn btn-primary">Pay</button>
</div>
</div>
</form>
</div>
</section>
</div>
</div>
<script type="text/javascript">
$(document).ready(function() {
$('#paymentForm')
.formValidation({
icon: {
valid: 'fa fa-check',
invalid: 'fa fa-times',
validating: 'fa fa-refresh'
},
fields: {
cardHolder: {
selector: '#cardHolder',
validators: {
notEmpty: {
message: 'The card holder is required'
},
stringCase: {
message: 'The card holder must contain upper case characters only',
case: 'upper'
}
}
},
ccNumber: {
selector: '#ccNumber',
validators: {
notEmpty: {
message: 'The credit card number is required'
},
creditCard: {
message: 'The credit card number is not valid'
}
}
},
expMonth: {
selector: '[data-stripe="exp-month"]',
validators: {
notEmpty: {
message: 'The expiration month is required'
},
digits: {
message: 'The expiration month can contain digits only'
},
callback: {
message: 'Expired',
callback: function(value, validator) {
value = parseInt(value, 10);
var year = validator.getFieldElements('expYear').val(),
currentMonth = new Date().getMonth() + 1,
currentYear = new Date().getFullYear();
if (value < 0 || value > 12) {
return false;
}
if (year == '') {
return true;
}
year = parseInt(year, 10);
if (year > currentYear || (year == currentYear && value > currentMonth)) {
validator.updateStatus('expYear', 'VALID');
return true;
} else {
return false;
}
}
}
}
},
expYear: {
selector: '[data-stripe="exp-year"]',
validators: {
notEmpty: {
message: 'The expiration year is required'
},
digits: {
message: 'The expiration year can contain digits only'
},
callback: {
message: 'Expired',
callback: function(value, validator) {
value = parseInt(value, 10);
var month = validator.getFieldElements('expMonth').val(),
currentMonth = new Date().getMonth() + 1,
currentYear = new Date().getFullYear();
if (value < currentYear || value > currentYear + 10) {
return false;
}
if (month == '') {
return false;
}
month = parseInt(month, 10);
if (value > currentYear || (value == currentYear && month > currentMonth)) {
validator.updateStatus('expMonth', 'VALID');
return true;
} else {
return false;
}
}
}
}
},
cvvNumber: {
selector: '.cvvNumber',
validators: {
notEmpty: {
message: 'The CVV number is required'
},
cvv: {
message: 'The value is not a valid CVV',
creditCardField: 'ccNumber'
}
}
}
}
})
.on('success.validator.fv', function(e, data) {
if (data.field === 'ccNumber' && data.validator === 'creditCard') {
var $icon = data.element.data('fv.icon');
switch (data.result.type) {
case 'AMERICAN_EXPRESS':
$icon.removeClass().addClass('form-control-feedback fa fa-cc-amex');
break;
case 'DISCOVER':
$icon.removeClass().addClass('form-control-feedback fa fa-cc-discover');
break;
case 'MASTERCARD':
$icon.removeClass().addClass('form-control-feedback fa fa-cc-mastercard');
break;
case 'VISA':
$icon.removeClass().addClass('form-control-feedback fa fa-cc-visa');
break;
default:
$icon.removeClass().addClass('form-control-feedback fa fa-credit-card');
break;
}
}
})
.on('err.field.fv', function(e, data) {
if (data.field === 'ccNumber') {
var $icon = data.element.data('fv.icon');
$icon.removeClass().addClass('form-control-feedback fa fa-times');
}
});
});
</script>
</body>
</html>