You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

79 lines
2.2 KiB
JavaScript

(function($) {
$.fn.combobox = function(options) {
var defaults = {
maxLength: 5,
source: [],
onSelect: function() {}
};
var settings = $.extend(defaults, options);
var $inputElement = this;
$inputElement.wrap("<span style='position: relative; display: block;'>");
var $divHtml =
$("<div class='combobox' style='position: absolute; top: 100%; left: 0px; z-index: 100; display: none;'></div>");
var $ulHtml =
$("<ul class='list-unstyled' style='width: 100%;text-align: left;'></ul>");
var dataset = settings.source;
for (var rowNum = 0; rowNum < dataset.length; rowNum++) {
var data = dataset[rowNum];
var $liHtml = $("<li class='combobox-item' item-value='" + data.value + "'>" + data.text + "</li>");
if (data.disable) {
$liHtml.removeClass("combobox-item");
} else {
$liHtml.click(function() {
$inputElement.val($(this).attr("item-value"));
if ( $.isFunction( settings.onSelect ) ) {
settings.onSelect.call(this);
}
});
}
$liHtml.appendTo($ulHtml);
}
$ulHtml.appendTo($divHtml);
$inputElement.after($divHtml);
$inputElement.focus(function() {
$divHtml.show('fast');
}).blur(function() {
$divHtml.fadeOut();
});
$inputElement.keydown(function(event) {
var keyCode = event.keyCode || event.which;
if (keyCode == 8 || keyCode == 46 ||
(keyCode >= 37 && keyCode <= 40)) {
return true;
} else if ((keyCode >= 48 && keyCode <= 57) ||
(keyCode >= 96 && keyCode <= 105)) {
if ($inputElement.val().length < settings.maxLength) {
return true;
} else {
return false;
}
} else {
return false;
}
}).blur(function() {
var str = $inputElement.val();
if (str.length > settings.maxLength) {
str = str.substring(0, settings.maxLength);
}
if (/^\d+$/.test(str)) {
$inputElement.val(str);
} else {
$inputElement.val("");
}
if ( $.isFunction( settings.onSelect ) ) {
settings.onSelect.call(this);
}
}).focus(function() {
this.style.imeMode = 'disabled';
});
return this;
};
})(jQuery);