Only show Active Items in autocomplete
I have a question. I have an Autocomplete the is shwing a list of Active people. Is there a way to only show Active people but if they type a name of an Inactive person the name will show in the input box but not in the dropdown list?
This is my combo box function
- (function($) {
- $.widget("ui.combobox", {
- _create: function() {
- var input, self = this,
- select = this.element.hide(),
- selected = select.children(":selected"),
- value = selected.val() ? selected.text() : "",
- wrapper = this.wrapper = $("<span>").addClass("ui-combobox").insertAfter(select);
- input = $("<input>").appendTo(wrapper).val(value).addClass("ui-state-default ui-combobox-input").autocomplete({
- delay: 0,
- minLength: 0,
- source: function(request, response) {
- var matcher = new RegExp($.ui.autocomplete.escapeRegex(request.term), "i");
- response(select.find("option").map(function() {
- var text = $(this).text();
- if (this.value && (!request.term || matcher.test(text))) return {
- label: text.replace(
- new RegExp("(?![^&;]+;)(?!<[^<>]*)(" + $.ui.autocomplete.escapeRegex(request.term) + ")(?![^<>]*>)(?![^&;]+;)", "gi"), "<strong>$1</strong>"),
- value: text,
- option: this,
- category: $(this).closest("optgroup").attr("label")
- };
- //MK
- $('#test').attr('style', 'display: none;');
- }).get());
- },
- select: function(event, ui) {
- ui.item.option.selected = true;
- getVendor();
- self._trigger("selected", event, {
- item: ui.item.option
- });
- },
- change: function(event, ui) {
- if (!ui.item) {
- var matcher = new RegExp("^" + $.ui.autocomplete.escapeRegex($(this).val()) + "$", "i"),
- valid = false;
- select.children("option").each(function() {
- if ($(this).text().match(matcher)) {
- this.selected = valid = true;
- return false;
- }
- });
- if (!valid) {
- getVendor();
- $('#test').attr('style', 'display: block;');
- // remove invalid value, as it didn't match anything
- //$( this ).val( "" );
- //select.val( "" );
- //input.data( "autocomplete" ).term = "";
- //return false;
- }
-
- }
- }
- }).addClass("ui-widget ui-widget-content ui-corner-left");
- input.data("autocomplete")._renderItem = function(ul, item) {
- return $("<li></li>").data("item.autocomplete", item).append("<a>" + item.label + "</a>").appendTo(ul);
- };
- input.data("autocomplete")._renderMenu = function(ul, items) {
- var self = this,
- currentCategory = "";
- $.each(items, function(index, item) {
- if (item.category != currentCategory) {
- if (item.category) {
- ul.append("<li class='ui-autocomplete-category'><b>" + item.category + "</b></li>");
- }
- currentCategory = item.category;
- }
- self._renderItem(ul, item);
- });
- };
- $("<a>").attr("tabIndex", -1).attr("title", "Show All Items").appendTo(wrapper).button({
- icons: {
- primary: "ui-icon-triangle-1-s"
- },
- text: false
- }).removeClass("ui-corner-all").addClass("ui-corner-right ui-combobox-toggle").click(function() {
- // close if already visible
- if (input.autocomplete("widget").is(":visible")) {
- input.autocomplete("close");
- return;
- }
- // work around a bug (likely same cause as #5265)
- $(this).blur();
- // pass empty string as value to search for, displaying all results
- input.autocomplete("search", "");
- input.focus();
- });
- },
- destroy: function() {
- this.wrapper.remove();
- this.element.show();
- $.Widget.prototype.destroy.call(this);
- }
- });
- })(jQuery);
- $(function() {
- $("#combobox").combobox();
- $("#toggle").click(function() {
- $("#combobox").toggle();
- });
- });
this is my html
- <select id="combobox" name="chkPayTo" >
- <option value="" selected="selected"></option>
- <cfloop query="getCustomer">
- <cfif #getCustomer.Type# neq #customerType#>
- <cfset customerType = #getCustomer.Type#>
- <optgroup label="<cfoutput>#getCustomer.TypeName#</cfoutput>">
- </cfif>
- <option value="<cfoutput>#getCustomer.TypeCode#_#getCustomer.ID#</cfoutput>"><cfoutput>#getCustomer.Name#</cfoutput></option>
- </cfloop>
- </select>
My boss asked me today if the active people will show up on the dropdown but be able to type an inactive person and have then show up.
I do have a way set up that if not valid i call a JS function up to check the non valid people. This worded but for this page I am getting 3 different types of people from 3 different sources.
I tried checking to see if the person was inactive make the option not visible but in the autocomplete it showes them.