(function($) { $.fn.combobox = function(options) { var defaults = { maxLength: 5, source: [], onSelect: function() {} }; var settings = $.extend(defaults, options); var $inputElement = this; $inputElement.wrap(""); var $divHtml = $(""); var $ulHtml = $(""); var dataset = settings.source; for (var rowNum = 0; rowNum < dataset.length; rowNum++) { var data = dataset[rowNum]; var $liHtml = $("
  • " + data.text + "
  • "); 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);