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
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);
|