Skip to content Skip to sidebar Skip to footer

How To Add A Fixed Item In The Jquery's Autocomplete List?

I have a simple jQuery code to set autocomplete function: $(document).ready(function() { fInitApp(); }); function fInitApp(){ $('#myList').autocomplete({ minLength: 2,

Solution 1:

You can override the autocomplete's _renderMenu method. E.g:

/* saves the current behavior of _renderMenu */var render = $('#myList').autocomplete('instance')._renderMenu;

/* overrides the default method */
$('#myList').autocomplete('instance')._renderMenu = function(ul, items) {
  /* adds your fixed item */
  items.push({ label: 'my custom link', value: 'my custom link' });
  /* calls the default behavior again */
  render.call(this, ul, items);
};

I've made an example for you. Start typing 'co', and you'll see both COBOL and ColdFusion, but you'll see a fixed last item ES 2015. The same will happen, if you start typing 'jav', etc. Take a look:

$(document).ready(function() {
  fInitApp();
});

functionfInitApp() {
  $('#myList').autocomplete({
    minLength: 1,
    source: [
      "ActionScript",
      "AppleScript",
      "Asp",
      "BASIC",
      "C",
      "C++",
      "Clojure",
      "COBOL",
      "ColdFusion",
      "Erlang",
      "Fortran",
      "Groovy",
      "Haskell",
      "Java",
      "JavaScript",
      "Lisp",
      "Perl",
      "PHP",
      "Python",
      "Ruby",
      "Scala",
      "Scheme"
    ],
    dataType: "json"
  });

  var render = $('#myList').autocomplete('instance')._renderMenu;

  $('#myList').autocomplete('instance')._renderMenu = function(ul, items) {
    items.push({
      label: 'ES 2015',
      value: 'ES 2015',
      last: true
    });

    render.call(this, ul, items);
  };

  var renderItem = $('#myList').autocomplete('instance')._renderItem;
  $('#myList').autocomplete('instance')._renderItem = function(ul, item) {    
    if (item.last) {
      setTimeout(function() {
        ul.find('li:last-child').css({
          position: 'fixed',
          top: ul.offset().top + (ul[0].scrollHeight === ul[0].clientHeight ? ul.offset().height : ul[0].clientHeight),
          left: ul[0].style.left,
          width: 'calc(145px - 1.4em)',
          border: '1px solid #CCC',
          borderTop: '2px solid #999',
          backgroundColor: '#FFEFFE'
        });
      }, 0);
    }

    return renderItem.call(this, ul, item);
  };
}
.ui-autocomplete {
  max-height: 125px;
  overflow-y: auto;
  overflow-x: hidden;
}
<linkhref="https://code.jquery.com/ui/1.11.4/themes/black-tie/jquery-ui.css"rel="stylesheet" /><scriptsrc="https://code.jquery.com/jquery-1.11.3.js"></script><scriptsrc="https://code.jquery.com/ui/1.11.4/jquery-ui.js"></script><inputname="myList"id="myList">

Solution 2:

You can use "response" event. For more info see https://api.jqueryui.com/autocomplete/#event-response

//add option in autosuggest list, that would be shown on every search even if search result is null.
$("#myList").autocomplete({
    response: function (event, ui) {
        ui.content.push({ label: "my custom link", value: "my custom link"});
    }
});

Post a Comment for "How To Add A Fixed Item In The Jquery's Autocomplete List?"