1

I have combobox jquery for autocomplete my dropdown list. I also have 2 input fields that disabled. If the combobox value is new, it will enable these 2 input fields. Any solution how to do this? My code so far:

(function($) {
  $.widget("custom.combobox", {
    _create: function() {
      this.wrapper = $("<span>")
        .addClass("custom-combobox")
        .insertAfter(this.element);

      this.element.hide();
      this._createAutocomplete();
      this._createShowAllButton();
    },
    _createAutocomplete: function() {
      var selected = this.element.children(":selected"),
        value = selected.val() ? selected.text() : "";

      this.input = $("<input>")
        .appendTo(this.wrapper)
        .val(value)
        .attr("title", "")
        .attr("id", "sicombo")
        .addClass("form-control custom-combobox-input ui-widget ui-widget-content ui-state-default ui-corner-left")
        .autocomplete({
          delay: 0,
          minLength: 0,
          source: $.proxy(this, "_source")
        })
        .tooltip({
          tooltipClass: "ui-state-highlight"
        });

      this._on(this.input, {
        autocompleteselect: function(event, ui) {
          ui.item.option.selected = true;
          this._trigger("select", event, {
            item: ui.item.option
          });
        },
        autocompletechange: "_removeIfInvalid"
      });
    },
    _createShowAllButton: function() {
      var input = this.input,
        wasOpen = false;

      $("<a>")
        .attr("tabIndex", -1)
        .attr("title", "Show All Items")
        .attr("id", "sicombo2")
        .tooltip()
        .appendTo(this.wrapper)
        .button({
          icons: {
            primary: "ui-icon-triangle-1-s"
          },
          text: false
        })
        .removeClass("ui-corner-all")
        .addClass("custom-combobox-toggle ui-corner-right")
        .mousedown(function() {
          wasOpen = input.autocomplete("widget").is(":visible");
        })
        .click(function() {
          input.focus();

          // Close if already visible
          if (wasOpen) {
            return;
          }

          // Pass empty string as value to search for, displaying all results
          input.autocomplete("search", "");
        });
    },
    _source: function(request, response) {
      var matcher = new RegExp($.ui.autocomplete.escapeRegex(request.term), "i");
      response(this.element.children("option").map(function() {
        var text = $(this).text();
        if (this.value && (!request.term || matcher.test(text)))
          return {
            label: text,
            value: text,
            option: this
          };
      }));
    },
    _removeIfInvalid: function(event, ui) {

      // Selected an item, nothing to do
      if (ui.item) {
        return;
      }

      // Search for a match (case-insensitive)
      var value = this.input.val(),
        valueLowerCase = value.toLowerCase(),
        valid = false;
      this.element.children("option").each(function() {
        if ($(this).text().toLowerCase() === valueLowerCase) {
          this.selected = valid = true;
          return false;
        }
      });

      // Found a match, nothing to do
      if (valid) {
        return;
      }

      // Remove invalid value
      this.input
        .val("")
        .attr("title", value + " didn't match any item")
        .tooltip("open");
      this.element.val("");
      this._delay(function() {
        this.input.tooltip("close").attr("title", "");
      }, 2500);
      this.input.autocomplete("instance").term = "";
    },
    _destroy: function() {
      this.wrapper.remove();
      this.element.show();
    }
  });
})(jQuery);

$(function() {
  $("#combobox123").combobox();
});

$(function() {
  $("input:text[name=browser]").attr("disabled", true);
  $("input:text[name=idbrowser]").attr("disabled", true);

  $('select[name=brow]').on('change', function() {
    $("input:text[name=browser]").attr("disabled", ($(this).val() === 'new') ? false : true);
    $("input:text[name=idbrowser]").attr("disabled", ($(this).val() === 'new') ? false : true);
  });
});
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.0/themes/base/jquery-ui.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://code.jquery.com/ui/1.12.0/jquery-ui.js"></script>
<select name="brow" class="form-control" id="combobox123">
  <option value="">-- Choose --</option>
  <option value="new">Create New</option>
  <option value="chrome">Google Chrome</option>
  <option value="firefox">Mozilla Firefox</option>
</select>
<input type="text" class="form-control" name="idbrowser" />
<input type="text" class="form-control" name="browser" />

1 Answer 1

1

You should use autocompleteselect event of jQuery autocomplete.

Replace following code

$('select[name=brow]').on('change', function() {
    $("input:text[name=browser]").attr("disabled", ($(this).val() === 'new') ? false : true);
    $("input:text[name=idbrowser]").attr("disabled", ($(this).val() === 'new') ? false : true);
  });

With

$( "#sicombo" ).on( "autocompleteselect", function( event, ui ) {
     $("input:text[name=browser]").attr("disabled", (ui.item.option.value === 'new') ? false : true);
     $("input:text[name=idbrowser]").attr("disabled", (ui.item.option.value === 'new') ? false : true);
  });
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.