jQuery-Autocomplete
Ajax Autocomplete for jQuery allows you to easily create autocomplete/autosuggest boxes for text input fields
Top Related Projects
typeahead.js is a fast and fully-featured autocomplete library
Simple autocomplete pure vanilla Javascript library.
Ultra lightweight, usable, beautiful autocomplete with zero dependencies.
🔮 Fast and full-featured autocomplete library
Quick Overview
The devbridge/jQuery-Autocomplete is a feature-rich and customizable autocomplete plugin for jQuery. It provides an easy-to-use interface for adding autocomplete functionality to your web applications, allowing users to quickly find and select options from a list of suggestions.
Pros
- Highly Customizable: The plugin offers a wide range of configuration options, allowing you to tailor the autocomplete behavior to your specific needs.
- Responsive Design: The autocomplete suggestions are designed to be responsive and adapt to different screen sizes and devices.
- Extensive Documentation: The project's documentation is comprehensive and provides detailed guidance on how to use and configure the plugin.
- Active Development: The project is actively maintained, with regular updates and bug fixes.
Cons
- Dependency on jQuery: The plugin requires the jQuery library, which may not be necessary for all projects.
- Limited Functionality: While the plugin is feature-rich, it may not provide all the functionality required for more complex autocomplete use cases.
- Potential Performance Issues: Depending on the size of the data set and the number of suggestions, the plugin may experience performance issues, especially on slower devices.
- Limited Accessibility: The plugin's default implementation may not fully comply with accessibility standards, requiring additional customization.
Code Examples
Here are a few examples of how to use the devbridge/jQuery-Autocomplete plugin:
- Basic Autocomplete:
$('#autocomplete').autocomplete({
serviceUrl: '/autocomplete',
paramName: 'query',
transformResult: function(response) {
return {
suggestions: $.map(response, function(dataItem) {
return { value: dataItem.name, data: dataItem.id };
})
};
}
});
This code sets up a basic autocomplete functionality, where the suggestions are fetched from the /autocomplete
endpoint and displayed to the user.
- Customizing the Suggestion Template:
$('#autocomplete').autocomplete({
serviceUrl: '/autocomplete',
paramName: 'query',
transformResult: function(response) {
return {
suggestions: $.map(response, function(dataItem) {
return { value: dataItem.name, data: dataItem.id, icon: dataItem.icon };
})
};
},
formatResult: function(suggestion, currentValue) {
return `<div class="autocomplete-suggestion">
<img src="${suggestion.icon}" alt="${suggestion.value}">
<span>${suggestion.value}</span>
</div>`;
}
});
This example demonstrates how to customize the appearance of the autocomplete suggestions by providing a custom formatResult
function.
- Handling Selection Events:
$('#autocomplete').autocomplete({
serviceUrl: '/autocomplete',
paramName: 'query',
onSelect: function(suggestion) {
console.log('You selected:', suggestion.value, 'with data:', suggestion.data);
// Perform additional actions based on the selected suggestion
}
});
This code sets up an onSelect
event handler that is triggered when the user selects a suggestion from the autocomplete list, allowing you to perform additional actions based on the selected item.
Getting Started
To get started with the devbridge/jQuery-Autocomplete plugin, follow these steps:
- Include the jQuery library and the jQuery-Autocomplete plugin in your HTML file:
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/jquery-autocomplete@1.4.4/dist/jquery.autocomplete.min.js"></script>
- Create an input field where the autocomplete functionality will be applied:
<input type="text" id="autocomplete" placeholder="Start typing...">
- Initialize the autocomplete plugin on the input field:
$('#autocomplete').autocomplete({
serviceUrl: '/autocomplete',
paramName: 'query',
onSelect: function(suggestion) {
console.log('You selected:', suggestion.value, 'with data:', suggestion.data);
Competitor Comparisons
typeahead.js is a fast and fully-featured autocomplete library
Pros of typeahead.js
- More flexible and customizable, allowing for complex datasets and custom rendering
- Better performance with large datasets due to its efficient data management
- Active development and maintenance by Twitter
Cons of typeahead.js
- Steeper learning curve due to its more complex API
- Requires additional setup for basic functionality compared to jQuery-Autocomplete
Code Comparison
typeahead.js:
$('#search-input').typeahead({
hint: true,
highlight: true,
minLength: 1
},
{
name: 'states',
source: substringMatcher(states)
});
jQuery-Autocomplete:
$('#search-input').autocomplete({
lookup: states,
onSelect: function (suggestion) {
console.log('You selected: ' + suggestion.value);
}
});
Key Differences
- typeahead.js offers more advanced features and customization options, while jQuery-Autocomplete provides a simpler, more straightforward implementation
- typeahead.js has a modular architecture, allowing for better separation of concerns and extensibility
- jQuery-Autocomplete is easier to set up for basic use cases, making it more suitable for simpler projects
Use Cases
- Choose typeahead.js for complex, data-heavy applications requiring advanced customization
- Opt for jQuery-Autocomplete for simpler projects or when rapid implementation is a priority
Both libraries have their strengths, and the choice between them depends on the specific requirements of your project and your familiarity with each library's API.
Simple autocomplete pure vanilla Javascript library.
Pros of autoComplete.js
- Lightweight and dependency-free, making it easier to integrate into projects
- Offers more customization options and flexibility in styling
- Supports multiple data sources, including JSON, Arrays, and Functions
Cons of autoComplete.js
- Less mature and potentially less stable compared to jQuery-Autocomplete
- Smaller community and fewer resources available for support
- May require more setup and configuration for basic use cases
Code Comparison
autoComplete.js:
const autoCompleteJS = new autoComplete({
selector: "#autoComplete",
data: {
src: ["Apple", "Banana", "Cherry"],
cache: true,
},
resultsList: {
element: (list, data) => {
if (!data.results.length) {
const message = document.createElement("div");
message.setAttribute("class", "no_result");
message.innerHTML = `<span>Found No Results for "${data.query}"</span>`;
list.prepend(message);
}
},
noResults: true,
},
});
jQuery-Autocomplete:
$('#autocomplete').autocomplete({
serviceUrl: '/autocomplete/countries',
onSelect: function (suggestion) {
alert('You selected: ' + suggestion.value + ', ' + suggestion.data);
}
});
Both libraries offer autocomplete functionality, but autoComplete.js provides more modern features and flexibility, while jQuery-Autocomplete is simpler to set up and has a larger user base. The choice between them depends on project requirements and developer preferences.
Ultra lightweight, usable, beautiful autocomplete with zero dependencies.
Pros of Awesomplete
- Lightweight and dependency-free, making it easier to integrate into projects
- Supports custom rendering of suggestions, allowing for more flexible UI customization
- Built-in keyboard navigation and accessibility features
Cons of Awesomplete
- Limited built-in Ajax support, requiring more manual setup for remote data sources
- Fewer advanced filtering options compared to jQuery-Autocomplete
- Smaller community and fewer updates in recent years
Code Comparison
Awesomplete:
var input = document.getElementById("myinput");
new Awesomplete(input, {
list: ["Ada", "Java", "JavaScript", "Brainfuck", "LOLCODE", "Node.js", "Ruby on Rails"]
});
jQuery-Autocomplete:
$('#myinput').autocomplete({
lookup: ["Ada", "Java", "JavaScript", "Brainfuck", "LOLCODE", "Node.js", "Ruby on Rails"],
onSelect: function (suggestion) {
console.log('You selected: ' + suggestion.value);
}
});
Both libraries offer simple setup for basic autocomplete functionality. Awesomplete uses vanilla JavaScript and has a more concise initialization, while jQuery-Autocomplete relies on jQuery and provides an additional callback function for selection events.
🔮 Fast and full-featured autocomplete library
Pros of Autocomplete
- Framework-agnostic and more flexible, supporting various JavaScript frameworks
- More modern architecture with better performance and smaller bundle size
- Extensive documentation and active community support
Cons of Autocomplete
- Steeper learning curve due to its more complex API
- May require more setup and configuration for basic use cases
Code Comparison
jQuery-Autocomplete:
$('#autocomplete').autocomplete({
serviceUrl: '/api/search',
onSelect: function(suggestion) {
console.log('Selected: ' + suggestion.value);
}
});
Autocomplete:
import { autocomplete } from '@algolia/autocomplete-js';
autocomplete({
container: '#autocomplete',
getSources({ query }) {
return [{
sourceId: 'products',
getItems() {
return getAlgoliaResults({
searchClient,
queries: [{ indexName: 'products', query }],
});
},
templates: {
item({ item }) {
return `<div>${item.name}</div>`;
},
},
}];
},
});
The code comparison shows that Autocomplete offers more granular control and flexibility, but requires more setup. jQuery-Autocomplete provides a simpler API for basic use cases but is less customizable.
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual CopilotREADME
Ajax Autocomplete for jQuery
Ajax Autocomplete for jQuery allows you to easily create autocomplete/autosuggest boxes for text input fields.
It has no dependencies other than jQuery.
The standard jquery.autocomplete.js file is around 13KB when minified.
API
The following sets up autocomplete for input fields where options
is an object literal that defines the settings to use for the autocomplete plugin. All available option settings are shown in the tables below.
$(selector).autocomplete(options);
General settings (local and Ajax)
Setting | Default | Description |
---|---|---|
noCache | false | Boolean value indicating whether to cache suggestion results |
delimiter | optional | String or RegExp, that splits input value and takes last part to as query for suggestions. Useful when for example you need to fill list of comma separated values. |
minChars | 1 | Minimum number of characters required to trigger autosuggest |
triggerSelectOnValidInput | true | Boolean value indicating if select should be triggered if it matches suggestion |
preventBadQueries | true | Boolean value indicating if it should prevent future Ajax requests for queries with the same root if no results were returned. E.g. if Jam returns no suggestions, it will not fire for any future query that starts with Jam |
autoSelectFirst | false | If set to true , first item will be selected when showing suggestions |
beforeRender | optional | function (container, suggestions) {} called before displaying the suggestions. You may manipulate suggestions DOM before it is displayed |
formatResult | optional | function (suggestion, currentValue) {} custom function to format suggestion entry inside suggestions container |
formatGroup | optional | function (suggestion, category) {} custom function to format group header |
groupBy | optional | property name of the suggestion data object, by which results should be grouped |
maxHeight | 300 | Maximum height of the suggestions container in pixels |
width | auto | Suggestions container width in pixels, e.g.: 300, flex for max suggestion size and auto takes input field width |
zIndex | 9999 | 'z-index' for suggestions container |
appendTo | optional | Container where suggestions will be appended. Default value document.body . Can be jQuery object, selector or HTML element. Make sure to set position: absolute or position: relative for that element |
forceFixPosition | false | Suggestions are automatically positioned when their container is appended to body (look at appendTo option), in other cases suggestions are rendered but no positioning is applied. Set this option to force auto positioning in other cases |
orientation | bottom | Vertical orientation of the displayed suggestions, available values are auto , top , bottom . If set to auto , the suggestions will be orientated it the way that place them closer to middle of the view port |
preserveInput | false | If true , input value stays the same when navigating over suggestions |
showNoSuggestionNotice | false | When no matching results, display a notification label |
noSuggestionNotice | No results | Text or htmlString or Element or jQuery object for no matching results label |
onInvalidateSelection | optional | function () {} called when input is altered after selection has been made. this is bound to input element |
tabDisabled | false | Set to true to leave the cursor in the input field after the user tabs to select a suggestion |
Event function settings (local and Ajax)
Event setting | Function description |
---|---|
onSearchStart | function (params) {} called before Ajax request. this is bound to input element |
onHint | function (hint) {} used to change input value to first suggestion automatically. this is bound to input element |
onSearchComplete | function (query, suggestions) {} called after Ajax response is processed. this is bound to input element. suggestions is an array containing the results |
transformResult | function(response, originalQuery) {} called after the result of the query is ready. Converts the result into response.suggestions format |
onSelect | function (suggestion) {} Callback function invoked when user selects suggestion from the list. this inside callback refers to input HtmlElement. |
onSearchError | function (query, jqXHR, textStatus, errorThrown) {} called if Ajax request fails. this is bound to input element |
onHide | function (container) {} called before container will be hidden |
Local only settings
Setting | Default | Description |
---|---|---|
lookupLimit | no limit | Number of maximum results to display for local lookup |
lookup | n/a | Callback function or lookup array for the suggestions. It may be array of strings or suggestion object literals |
suggestion | n/a | Not a settings, but in the context of above row, a suggestion is an object literal with the following format: { value: 'string', data: any } |
lookupFilter | n/a | function (suggestion, query, queryLowerCase) {} filter function for local lookups. By default it does partial string match (case insensitive) |
Ajax only settings
Setting | Default | Description |
---|---|---|
serviceUrl | n/a | Server side URL or callback function that returns serviceUrl string |
type | GET | Ajax request type to get suggestions |
dataType | text | type of data returned from server. Either text , json or jsonp , which will cause the autocomplete to use jsonp. You may return a json object in your callback when using jsonp |
paramName | query | The name of the request parameter that contains the query |
params | optional | Additional parameters to pass with the request |
deferRequestBy | 0 | Number of miliseconds to defer Ajax request |
ajaxSettings | optional | Any additional Ajax Settings that configure the jQuery Ajax request |
Default Options
Default options for all instances can be accessed via $.Autocomplete.defaults
.
Instance Methods
Autocomplete instance has following methods:
setOptions(options)
: you may update any option at any time. Options are listed above.clear
: clears suggestion cache and current suggestions.clearCache
: clears suggestion cache.disable
: deactivate autocomplete.enable
: activates autocomplete if it was deactivated before.hide
: hides suggestions.dispose
: destroys autocomplete instance. All events are detached and suggestion containers removed.
There are two ways that you can invoke Autocomplete method. One is calling autocomplete on jQuery object and passing method name as string literal. If method has arguments, arguments are passed as consecutive parameters:
$('#autocomplete').autocomplete('disable');
$('#autocomplete').autocomplete('setOptions', options);
Or you can get Autocomplete instance by calling autcomplete on jQuery object without any parameters and then invoke desired method.
$('#autocomplete').autocomplete().disable();
$('#autocomplete').autocomplete().setOptions(options);
Usage
Html:
<input type="text" name="country" id="autocomplete"/>
Ajax lookup:
$('#autocomplete').autocomplete({
serviceUrl: '/autocomplete/countries',
onSelect: function (suggestion) {
alert('You selected: ' + suggestion.value + ', ' + suggestion.data);
}
});
Local lookup (no Ajax):
var countries = [
{ value: 'Andorra', data: 'AD' },
// ...
{ value: 'Zimbabwe', data: 'ZZ' }
];
$('#autocomplete').autocomplete({
lookup: countries,
onSelect: function (suggestion) {
alert('You selected: ' + suggestion.value + ', ' + suggestion.data);
}
});
Custom lookup function:
$('#autocomplete').autocomplete({
lookup: function (query, done) {
// Do Ajax call or lookup locally, when done,
// call the callback and pass your results:
var result = {
suggestions: [
{ "value": "United Arab Emirates", "data": "AE" },
{ "value": "United Kingdom", "data": "UK" },
{ "value": "United States", "data": "US" }
]
};
done(result);
},
onSelect: function (suggestion) {
alert('You selected: ' + suggestion.value + ', ' + suggestion.data);
}
});
Styling
Generated HTML markup for suggestions is displayed below. You may style it any way you'd like.
<div class="autocomplete-suggestions">
<div class="autocomplete-group"><strong>NHL</strong></div>
<div class="autocomplete-suggestion autocomplete-selected">...</div>
<div class="autocomplete-suggestion">...</div>
<div class="autocomplete-suggestion">...</div>
</div>
Style sample:
.autocomplete-suggestions { border: 1px solid #999; background: #FFF; overflow: auto; }
.autocomplete-suggestion { padding: 2px 5px; white-space: nowrap; overflow: hidden; }
.autocomplete-selected { background: #F0F0F0; }
.autocomplete-suggestions strong { font-weight: normal; color: #3399FF; }
.autocomplete-group { padding: 2px 5px; }
.autocomplete-group strong { display: block; border-bottom: 1px solid #000; }
Response Format
Response from the server must be JSON formatted following JavaScript object:
{
// Query is not required as of version 1.2.5
"query": "Unit",
"suggestions": [
{ "value": "United Arab Emirates", "data": "AE" },
{ "value": "United Kingdom", "data": "UK" },
{ "value": "United States", "data": "US" }
]
}
Data can be any value or object. Data object is passed to formatResults function and onSelect callback. Alternatively, if there is no data you can supply just a string array for suggestions:
{
"query": "Unit",
"suggestions": ["United Arab Emirates", "United Kingdom", "United States"]
}
Non standard query/results
If your Ajax service expects the query in a different format, and returns data in a different format than the standard response, you can supply the "paramName" and "transformResult" options:
$('#autocomplete').autocomplete({
paramName: 'searchString',
transformResult: function(response) {
return {
suggestions: $.map(response.myData, function(dataItem) {
return { value: dataItem.valueField, data: dataItem.dataField };
})
};
}
})
Grouping Results
Specify groupBy
option of you data property if you wish results to be displayed in groups. For example, set groupBy: 'category'
if your suggestion data format is:
[
{ value: 'Chicago Blackhawks', data: { category: 'NHL' } },
{ value: 'Chicago Bulls', data: { category: 'NBA' } }
]
Results will be formatted into two groups NHL and NBA.
Known Issues
If you use it with jQuery UI library it also has plugin named autocomplete
. In this case you can use plugin alias devbridgeAutocomplete
:
$('.autocomplete').devbridgeAutocomplete({ ... });
It seems that for mobile Safari click events are only triggered if the CSS of the object being tapped has the cursor set to pointer:
.autocomplete-suggestion {
cursor: pointer;
}
See issue #542
License
Ajax Autocomplete for jQuery is freely distributable under the terms of an MIT-style license.
Copyright notice and permission notice shall be included in all copies or substantial portions of the Software.
Authors
Tomas Kirda / @tkirda
Top Related Projects
typeahead.js is a fast and fully-featured autocomplete library
Simple autocomplete pure vanilla Javascript library.
Ultra lightweight, usable, beautiful autocomplete with zero dependencies.
🔮 Fast and full-featured autocomplete library
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual Copilot