Jquery combobox
Results sorting
HTML
<div id="select-from" class="input-prepend pushRight">
<select id="from">
<option value=""></option>
<option value="Alesund AES">Alesund AES</option>
<option value="Alghero AHO">Alghero AHO</option>
<option value="Arad ARW">Arad ARW</option>
<option value="BarceLona - Terminal 2 BCN">BarceLona - Terminal 2 BCN</option>
<option value="Barcelona Girona GRO">Barcelona Girona GRO</option>
<option value="Bari BRI">Bari BRI</option>
<option value="Basel Mulhouse MLH">Basel Mulhouse MLH</option>
<option value="Belgrade BEG">Belgrade BEG</option>
<option value="Bergen BGO">Bergen BGO</option>
<option value="Bourgas BOJ">Bourgas BOJ</option>
<option value="Brno BRQ">Brno BRQ</option>
<option value="Brussels Charleroi CRL">Brussels Charleroi CRL</option>
<option value="Bucharest H. Coanda OTP">Bucharest H. Coanda OTP</option>
<option value="Budapest - Terminal 2B BUD">Budapest - Terminal 2B BUD</option>
<option value="Catania Fontanarossa Sicily CTA">Catania Fontanarossa Sicily CTA</option>
<option value="Cluj-Napoca CLJ">Cluj-Napoca CLJ</option>
<option value="Cologne CGN">Cologne CGN</option>
<option value="Corfu CFU">Corfu CFU</option>
<option value="Debrecen DEB">Debrecen DEB</option>
<option value="Doncaster/Sheffield DSA">Doncaster/Sheffield DSA</option>
<option value="Eindhoven EIN">Eindhoven EIN</option>
<option value="Forli/Bologna FRL">Forli/Bologna FRL</option>
<option value="Geneva GVA">Geneva GVA</option>
<option value="Hamburg Lubeck LBC">Hamburg Lubeck LBC</option>
<option value="Heraklion HER">Heraklion HER</option>
<option value="Katowice KTW">Katowice KTW</option>
<option value="Larnaca LCA">Larnaca LCA</option>
<option value="Liverpool LPL">Liverpool LPL</option>
<option value="Malmo MMX">Malmo MMX</option>
...
CSS
.ui-combobox {
position: relative;
display: inline-block;
}
.ui-combobox-toggle {
position: absolute;
top: 0;
bottom: 0;
margin-left: -1px;
padding: 0;
/* support: IE7 */
*height: 1.7em;
*top: 0.1em;
}
.ui-combobox-input {
margin: 0;
padding: 0.3em;
}
.ui-autocomplete {
max-height: 230px;
overflow-y: auto;
/* prevent horizontal scrollbar */
overflow-x: hidden;
/* add padding to account for vertical scrollbar */
padding-right: 0;
}
/* IE 6 doesn’t support max-height
* we use height instead, but this forces the menu to always be this tall
*/
* html .ui-autocomplete {
height: 100px;
}
JavaScript
(function ($) {
$.widget("ui.combobox", {
_create: function () {
var input,
that = this,
wasOpen = false,
select = this.element.hide(),
selected = select.children(":selected"),
value = selected.val() ? selected.text() : "",
wrapper = this.wrapper = $("<span>")
.addClass("ui-combobox")
.insertAfter(select);
function removeIfInvalid(element) {
var value = $(element).val(),
// the ^ matches only first character
matcher = new RegExp("^" + $.ui.autocomplete.escapeRegex(value) + "$", "i"),
valid = false;
select.children("option").each(function () {
if ($(this).text().match(matcher)) {
this.selected = valid = true;
return false;
}
});
if (!valid) {
// remove invalid value, as it didn't match anything
$(element)
.val("")
.attr("title", value + " didn't match any item")
.tooltip("open");
select.val("");
setTimeout(function () {
input.tooltip("close").attr("title", "");
}, 2500);
input.data("ui-autocomplete").term = "";
}
}
input = $("<input>")
.appendTo(wrapper)
.val(value)
.attr("title", "")
.addClass("ui-state-default ui-combobox-input")
.autocomplete({
delay: 0,
minLength: 0,
source: function (request, response) {
// the ^ matches only first character
var...