The form is:
<link rel="stylesheet" href="css/bootstrap.css" type="text/css" />
<script src="js/bootstrap.js" type="text/javascript"></script>
...
<form id="email-form">
<input type="text"
id="username"
pattern="[a-zA-Z ]{5,}"
placeholder="username"
maxlength="30"
title="Username"
required
data-content="A username is required. The username must be a series of alpha-numeric characters only."
data-role="validate"
class="form-control">
<input type="email"
id="email"
placeholder="email address"
title="Email"
required
data-content="An email address is required."
data-role="validate"
class="form-control">
<div class="push-down-top">
<button type="button" class="btn btn-link">Cancel</button>
<button type="button"
id="change-button"
data-role="trigger-validation"
class="btn">Login</button>
</div>
</form>
<div>The form is: <span id="msg"></span></div>
input:focus:invalid,
textarea:focus:invalid,
select:focus:invalid {
color: #c33;
border-color: #c33;
}
input:focus:invalid:focus,
textarea:focus:invalid:focus,
select:focus:invalid:focus {
border-color: #c33;
-webkit-box-shadow: 0 0 6px #fcc;
-moz-box-shadow: 0 0 6px #fcc;
box-shadow: 0 0 6px #fcc;
}
input:invalid,
textarea:invalid,
select:invalid {
border-bottom: 1px solid #c33;
}
input:valid + .invalid /* Adjacent sibling selector */ {
visibility: hidden;
}
input:invalid + .invalid {
visibility: visible;
}
input:required {
border-left: 4px solid #c33;
}
input:valid {
border-bottom: transparent;
}
.invalid {
color: #999;
}
// this demo uses jQuery as the Bootstrap plug-ins are based off jQuery
$(function(){
var ValidationUtility = function() {
var elements, elementCount;
elements = $('[data-role="validate"]'),
elementCount = 0;
elements.popover({
placement: 'top'
});
elements.on('invalid', function() {
if (elementCount === 0) {
$('#' + this.id).popover('show');
elementCount++;
}
});
elements.on('blur', function() {
$(this).popover('hide');
});
var validate = function(formSelector) {
elementCount = 0;
if (formSelector.indexOf('#') === -1) {
formSelector = '#' + formSelector;
}
return $(formSelector)[0].checkValidity();
};
return {
validate: validate
};
};
var validator = new ValidationUtility();
$('[data-role="trigger-validation"]').click(function() {
if (validator.validate('email-form')) {
$('#msg').text('Valid');
}
else {
$('#msg').text('Invalid');
}
});
})