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?"