Dynamically show data in the Tooltip using AJAX

A tooltip is a small pop-up element that shows information when moving the mouse pointer to the element.

You can dynamically update the tooltip content with AJAX if you don’t want to fix the content while creating.

You can add the tooltip to the element with Bootstrap, jQueryUI, or any other library.

I am using the jQuery UI library in the tutorial.

In the demonstration, I am displaying the list of users and dynamically load information on the tooltip with AJAX on mouse hover.

Dynamically show data in the Tooltip using AJAX


Contents

  1. Table structure
  2. Configuration
  3. HTML
  4. jQuery
  5. PHP
  6. CSS
  7. Demo
  8. Conclusion

1. Table structure

I am using users table in the tutorial example.

CREATE TABLE `users` (
  `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
  `username` varchar(80) NOT NULL,
  `name` varchar(80) NOT NULL,
  `gender` varchar(10) NOT NULL,
  `email` varchar(60) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

2. Configuration

Create a config.php for the database connection.

Completed Code

<?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. HTML

Create <span> element with the user’s name in the <div class='content'> container. In the <span> specify title (use to enable tooltip from the library on the element) and id attribute.

Store userid in data-id attribute.

You can define any default value in the title attribute.

Completed Code

<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/jquery/3.6.0/jquery.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script>
<script src='script.js' type='text/javascript'></script>
  
<div class='container'>
 
 <div class='content'>
   <span title='Please wait..' data-id='1' id='user_1'>Yogesh Singh</span>
 </div>
 
 <div class='content'>
   <span title='Please wait..' data-id='2' id='user_2'>Sonarika Bhadoria</span>
 </div>

 <div class='content'>
   <span title='Please wait..' data-id='3' id='user_3'>Vishal Sahu</span>
 </div>

 <div class='content'>
   <span title='Please wait..' data-id='4' id='user_4'>Sunil</span>
 </div>
</div>

4. jQuery

Create script.js file.

Initialize tooltip on the <span> element by calling tooltip() method on the selector.

In the tooltip() method define two options track and open.

  • track – Enable to change the position of tooltip according to the mouse movement when it set to true.
  • open – Get the user id from data-id attribute and assign to the userid variable. Send the AJAX request and pass the userid as data. On successful callback update the content option with the response.

NOTE – Sometime while setting tooltip content dynamically it get freez when moving mouse fastly over element. For this I defined mouseout event on <span> which reintialize the tooltip.

Completed Code

$(document).ready(function(){

 // initialize tooltip
 $( ".content span" ).tooltip({
   track:true,
   open: function( event, ui ) {
   var id = this.id;
   var userid = $(this).attr('data-id');
 
   $.ajax({
    url:'fetch_details.php',
    type:'post',
    data:{userid:userid},
    success: function(response){
 
    // Setting content option
    $("#"+id).tooltip('option','content',response);
 
   }
  });
  }
 });

 $(".content span").mouseout(function(){
   // re-initializing tooltip
   $(this).attr('title','Please wait...');
   $(this).tooltip();
   $('.ui-tooltip').hide();
 });

});


5. PHP

Create fetch_details.php file.

Select the user detail from users table using POST userid and return the data.

Completed Code

<?php

include "config.php";

$userid = 0;
if(isset($_POST['userid'])){
   $userid = mysqli_real_escape_string($con,$_POST['userid']);
}

$select_query = "SELECT * FROM users WHERE id=".$userid;

$result = mysqli_query($con,$select_query);

$html = '<div>';
while($row = mysqli_fetch_array($result)){
  $username = $row['username'];
  $name = $row['name'];
  $gender = $row['gender'];
  $email = $row['email'];

  $html .= "<span class='head'>Name : </span><span>".$name."</span><br/>";
  $html .= "<span class='head'>Username : </span><span>".$username."</span><br/>";
  $html .= "<span class='head'>Gender : </span><span>".$gender."</span><br/>";
  $html .= "<span class='head'>Email : </span><span>".$email."</span><br/>";
}
$html .= '</div>';

echo $html;

6. CSS

.container{
 margin: 0 auto;
 width: 30%;
}

.content{
 border: 1px solid black;
 padding: 5px;
 margin-bottom: 5px;
}
.content span{
 width: 250px;
}
.content span:hover{
 cursor: pointer;
}

7. Demo

View Demo


8. Conclusion

On tooltip open event sends AJAX request to fetch the data and update the tooltip content with the response on successful callback.

To stop the tooltip from freeze I define mouseout event from where reinitialize the tooltip.

If you know some better solution to solving this problem, let me know in the comment section.

If you found this tutorial helpful then don't forget to share.
Are you want to get implementation help, or modify or extend the functionality of this script? Submit paid service request.

26 thoughts on “Dynamically show data in the Tooltip using AJAX”

  1. I don’t understand this sentence:
    $(“#”+id).tooltip(‘option’,’content’,response);
    What means $(“#”+id) ? is this expression correct?

    Thanks

    Reply
  2. This is a great tutorial. However I can’t manage to trigger the open event. The tooltip from JQuery UI is shown, but on debugging the browser the open: function( event, ui ) is not being triggered.
    My selector matches the elements class (there a lot of elements with the same class)
    $( “.c-hex-grid__media” ).tooltip({….

    Any ideas appreciated!

    Reply
  3. Hi, the script looks fine, thanks a lot. But I have the problem, that the tooltip starts working on the second mouseover. After the tooltip has been shown first, it works on every mouseover.
    Firefox-Console does not display any errors.

    Reply

Leave a Comment