217 lines
9.3 KiB
HTML
217 lines
9.3 KiB
HTML
<!DOCTYPE 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> |