The autocomplete functionality shows the suggestion list according to the entered value. You can choose a suggestion from the list. With jQuery UI you can easily add autocomplete widget to the input element. You can use your mouse or keyboard arrow keys to navigate the suggestion list. The widget has various options for customization.
You can set the suggestion source value while initializing the widget. This means it will search for values within the given source value whenever the user types any character. Alternatively, you can make it dynamic with AJAX.
In this tutorial, I show how you can add jQuery UI autocomplete on the textbox and select single or multiple values from the suggestion list.
Contents
- Create a Table
- Create a file for Database connection
- Download and Include jQuery UI
- Create HTML elements for Autocomplete Initialization
- AJAX – Retrieving jQuery UI autocomplete Data
- jQuery – Implementing the jQuery UI Autocomplete
- Demo
- Conclusion
1. Create a Table
I am using users
table in the example.
CREATE TABLE `users` ( `id` int(11) NOT NULL, `username` varchar(100) NOT NULL, `name` varchar(100) NOT NULL, `email` varchar(100) NOT NULL );
2. Create a file for Database connection
Create a config.php
file for database connection.
<?php $host = "localhost"; /* Host name */ $user = "root"; /* User */ $password = ""; /* Password */ $dbname = "tutorial"; /* Database name */ $con = mysqli_connect($host, $user, $password,$dbname); // Check connection if (!$con) { die("Connection failed: " . mysqli_connect_error()); }
3. Download and Include jQuery UI
- Download jQuery and jQuery UI libraries.
- With jQuery and include jQuery UI library script and CSS files in the
<head>
section or end of</body>
.
<!-- Script --> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script> <!-- jQuery UI --> <link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/themes/smoothness/jquery-ui.css"> <script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script>
4. Create HTML elements for Autocomplete Initialization
Created 4 input boxes –
- The first textbox to add autocomplete widget.
- The second textbox displays the user ID that was selected from the suggestions list.
- The third textbox is to add multiple autocomplete.
- The fourth textbox shows selected multiple user ids.
<table> <tr> <td>Single selection</td> <td><input type='text' id='autocomplete' ></td> </tr> <tr> <td>Selected User id</td> <td><input type='text' id='selectuser_id' /></td> </tr> <tr> <td>Multiple Selection</td> <td><input type='text' id='multi_autocomplete' ></td> </tr> <tr> <td>Selected User ids</td> <td><input type='text' id='selectuser_ids' /></td> </tr> </table>
5. AJAX – Retrieving jQuery UI autocomplete Data
To handle AJAX requests, create a fetchData.php
file.
Retrieve records from the users
table based on the “POST” search value. Declare an Array variable $response
and initialize it with an associative array where pass the $row['id']
to value
key and $row['name']
to label
key.
<?php include "config.php"; if(isset($_POST['search'])){ $search = mysqli_real_escape_string($con,$_POST['search']); $query = "SELECT * FROM users WHERE name like'%".$search."%'"; $result = mysqli_query($con,$query); $response = array(); while($row = mysqli_fetch_array($result) ){ $response[] = array("value"=>$row['id'],"label"=>$row['name']); } echo json_encode($response); } exit;
NOTE – Remove
value
key from the array if you only want to work with name e.g.$response[] = array("label"=>$row['name']);
6. jQuery – Implementing the jQuery UI Autocomplete
Initialize jQuery UI autocomplete
Initialize jQuery UI autocomplete on the <input id='autocomplete'>
and <input id='multi_autocomplete'>
by calling autocomplete()
method.
Create 2 functions
- split() – Return an array by splitting the value.
- extractLast() – Select the last value from array.
Fetch autocomplete data
Single Selection
To fetch user names when a key is pressed, use the source
option. Retrieve the typed value using request.term
and pass it in the AJAX request. Then, pass the AJAX response in the response()
method.
Multiple Selection
Get the last input value from the input box using extractLast()
function and send AJAX request to fetch records.
Item Selection
Single Selection
Need to disable the default select
functionality because when an option is been selected then the value
is been shown on the screen instead of the label
if the value
is been defined.
Define select
option and store the selected item value to <input type='text' id='seluserid' >
and set label
to autocomplete element.
Multiple Selection
Split the input box values and remove last value. Push ui.item.label
and assign in the $('#multi_autocomplete')
.
Similarly, add ui.item.value
in $('#selectuser_ids')
.
$( function() { // Single Select $( "#autocomplete" ).autocomplete({ source: function( request, response ) { // Fetch data $.ajax({ url: "fetchData.php", type: 'post', dataType: "json", data: { search: request.term }, success: function( data ) { response( data ); } }); }, select: function (event, ui) { // Set selection $('#autocomplete').val(ui.item.label); // display the selected text $('#selectuser_id').val(ui.item.value); // save selected id to input return false; }, focus: function(event, ui){ $( "#autocomplete" ).val( ui.item.label ); $( "#selectuser_id" ).val( ui.item.value ); return false; }, }); // Multiple select $( "#multi_autocomplete" ).autocomplete({ source: function( request, response ) { var searchText = extractLast(request.term); $.ajax({ url: "fetchData.php", type: 'post', dataType: "json", data: { search: searchText }, success: function( data ) { response( data ); } }); }, select: function( event, ui ) { var terms = split( $('#multi_autocomplete').val() ); terms.pop(); terms.push( ui.item.label ); terms.push( "" ); $('#multi_autocomplete').val(terms.join( ", " )); // Id terms = split( $('#selectuser_ids').val() ); terms.pop(); terms.push( ui.item.value ); terms.push( "" ); $('#selectuser_ids').val(terms.join( ", " )); return false; } }); }); function split( val ) { return val.split( /,\s*/ ); } function extractLast( term ) { return split( term ).pop(); }
NOTE – Remove
select
option if you have not returnvalue
key from the AJAX file.
7. Demo
8. Conclusion
The user experience on your website or application can be significantly enhanced by adding autocomplete functionality.
Using jQuery UI with PHP and AJAX makes it simple to implement this feature and customize it according to your requirements.
In the example, I customize the widget selection and store the selection value
in the element for further processing.
For more information about the jQuery UI autocomplete widget, you can visit the official website.
If you found this tutorial helpful then don't forget to share.