A CodePen by Erik Jung.
$(function onReady() {
function showIndicator() {
$('.indicator').removeClass('hide');
}
function hideIndicator() {
$('.indicator').addClass('hide');
}
function spoofRequest(query) {
var def, states;
def = $.Deferred();
states = {AL: 'Alabama', AK: 'Alaska', AZ: 'Arizona', AR: 'Arkansas', CA: 'California', CO: 'Colorado', CT: 'Connecticut', DE: 'Delaware', DC: 'District of Columbia', FL: 'Florida', GA: 'Georgia', HI: 'Hawaii', ID: 'Idaho', IL: 'Illinois', IN: 'Indiana', IA: 'Iowa', KS: 'Kansas', KY: 'Kentucky', LA: 'Louisiana', ME: 'Maine', MD: 'Maryland', MA: 'Massachusetts', MI: 'Michigan', MN: 'Minnesota', MO: 'Missouri', MT: 'Montana', NE: 'Nebraska', NV: 'Nevada', NH: 'New Hampshire', NJ: 'New Jersey', NM: 'New Mexico', NY: 'New York', NC: 'North Carolina', ND: 'North Dakota', OH: 'Ohio', OK: 'Oklahoma', OR: 'Oregon', PA: 'Pennsylvania', RI: 'Rhode Island', SC: 'South Carolina', SD: 'South Dakota', TN: 'Tennessee', TX: 'Texas', UT: 'Utah', VT: 'Vermont', VA: 'Virginia', WA: 'Washington', WV: 'West Virginia', WI: 'Wisconsin', WY: 'Wyoming'};
states = $.map(states, function (name) {
return name;
});
setTimeout(function () {
def.resolve(states);
}, 1000);
return def.promise();
}
$('input').typeahead({
source: function search(query, process) {
showIndicator();
$.when(
spoofRequest(query)
).then(
process
).done(hideIndicator);
}
});
});
<body class="container-fluid">
<div class="row-fluid">
<div class="span4 offset4">
<div class="well">
<h2>
Bootstrap Typeahead<br>
<small>Works asynchronously out of the box</small>
</h2>
<hr>
<input class="span12" type="search">
<small class="indicator hide">Searching...</small>
</div>
</div>
</div>
</body>