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 creation.

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.

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 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.
You can define any default value in the title attribute.

Completed Code
 
<link href='jquery-ui.css' rel='stylesheet' type='text/css'> 
<script src='jquery-3.2.1.min.js' type='text/javascript'></script> 
<script src='jquery-ui.js' type='text/javascript'></script> 
<script src='script.js' type='text/javascript'></script>
  
<div class='container'>
 
 <div class='content'>
   <span title='Please wait..' id='user_1'>Yogesh Singh</span>
 </div>
 
 <div class='content'>
   <span title='Please wait..' id='user_2'>Sonarika Bhadoria</span>
 </div>

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

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

4. jQuery

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 by splitting element id. Send the AJAX request and pass the userid as data. On successful callback update the content option with the response.
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 split_id = id.split('_');
   var userid = split_id[1];
 
   $.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 a new 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 = $_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;
}
 

8. Conclusion

 

On tooltip open event sends AJAX request to fetch the data and update the tooltip content with the response on successfully 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.



 
 

CONVERSATION

0 Comments:

Post a Comment

Back
to top