It's always a joy to understand how things work. Well, at least I do. Alright, this time, I want to share with you all, how to create a simple jQuery tooltip. In this website, I'm using a script I grabed it online, and it uses onmouseover and onmouseout. It's really messy and annoying me. So, it's jQuery comes to rescue. The way it works is fairly simple, I use the Anchor tag REL and TITLE attributes to identify a tooltip and its content.
By the way, if you are having problems looking for a good iPage Web Host, you can use this website to guide you: Web Hosting Review
Getting the mouse X and Y axis
First of all, I did a search with google, and I found this little script from this blog, very useful information. It shows me the idea how to retrieve the X and Y Axis coordinate.
$(document).ready(function() { $().mousemove(function(e) { $('p').html("X Axis : " + e.pageX + " | Y Axis " + e.pageY); }); });
Â
Detect the Anchor element
I wrote a simple selector to select only Anchor tag with REL set to tooltip, I'm using the same approach in the Navigation List menu + jQuery Animate Effect tutorial. It's very straight forward and easy.
$('a[rel=tooltip]').mouseover(function() { ...... });As a result, anchor tags that support this simple jQuery tooltip should look like this
<a rel="tooltip" title="Testing of tooltip">sentences</a>
Â
Trick to hide the TITLE Attribute's Tooltip in browser
Okay, there is one major issue we need to sort it out - The native tooltip in Mozilla browsers. If you're using TITLE attribute in Anchor tag, on mouse over, a small yellow tooltip will appear, we want to avoid that. So, a simple solution, on mouse over, we will grab the value in the TITLE attribute, then, remove its value. While on mouse out, we'll put it back on. : ) simple and easy. You'll able to see this in the final code.
Â
Â
CSS
Finally, the CSS. I try to make the tooltip easy to reskin, you can customize the tooltip in this section. The structure of tooltip it made up with 3 sections - header, body and footer. It will be very easy for you to create your own skin.
#tooltip { position:absolute; z-index:9999; color:#fff; font-size:10px; width:180px; } #tooltip .tipHeader { height:8px; background:url(images/tipHeader.gif) no-repeat; } /* IE hack */ *html #tooltip .tipHeader {margin-bottom:-6px;} #tooltip .tipBody { background-color:#000; padding:5px 5px 5px 15px; } #tooltip .tipFooter { height:8px; background:url(images/tipFooter.gif) no-repeat; }
Â
Final Product
Basically, that's it. Just combine al the techniques together, and you have just learned how to create a simple jQuery tooltip! You can look at the demo or download it and start playing with it.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Simple JQuery Tooltips turtorial</title> <script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"></script> <script type="text/javascript"> $(document).ready(function() { //Select all anchor tag with rel set to tooltip $('a[rel=tooltip]').mouseover(function(e) { //Grab the title attribute's value and assign it to a variable var tip = $(this).attr('title'); //Remove the title attribute's to avoid the native tooltip from the browser $(this).attr('title',''); //Append the tooltip template and its value $(this).append('<div id="tooltip"><div class="tipHeader"></div><div class="tipBody">' + tip + '</div><div class="tipFooter"></div></div>'); //Set the X and Y axis of the tooltip $('#tooltip').css('top', e.pageY + 10 ); $('#tooltip').css('left', e.pageX + 20 ); //Show the tooltip with faceIn effect $('#tooltip').fadeIn('500'); $('#tooltip').fadeTo('10',0.8); }).mousemove(function(e) { //Keep changing the X and Y axis for the tooltip, thus, the tooltip move along with the mouse $('#tooltip').css('top', e.pageY + 10 ); $('#tooltip').css('left', e.pageX + 20 ); }).mouseout(function() { //Put back the title attribute's value $(this).attr('title',$('.tipBody').html()); //Remove the appended tooltip template $(this).children('div#tooltip').remove(); }); }); </script> <style> body {font-family:arial;font-size:12px;text-align:center;} div#paragraph {width:300px;margin:0 auto;text-align:left} a {color:#aaa;text-decoration:none;cursor:pointer;cursor:hand} a:hover {color:#000;text-decoration:none;} /* Tooltip */ #tooltip { position:absolute; z-index:9999; color:#fff; font-size:10px; width:180px; } #tooltip .tipHeader { height:8px; background:url(images/tipHeader.gif) no-repeat; } /* IE hack */ *html #tooltip .tipHeader {margin-bottom:-6px;} #tooltip .tipBody { background-color:#000; padding:5px; } #tooltip .tipFooter { height:8px; background:url(images/tipFooter.gif) no-repeat; } </style> </head> <body> <div id="paragraph"> A paragraph typically consists of a unifying main point, thought, or idea accompanied by supporting details. The non-fiction paragraph usually begins with the general and moves towards the more specific so as to advance an argument or point of view. Each <a rel="tooltip" title="A paragraph typically consists of a unifying main point, thought, or idea accompanied by <b>supporting details</b>">paragraph</a> builds on what came before and lays the ground for what comes next. Paragraphs generally range three to seven sentences all combined in a single paragraphed statement. In prose fiction successive details, for example; but it is just as common for the point of a prose paragraph to occur in the middle or the end. A paragraph can be as short as one word or run the length of multiple pages, and may consist of one or many <a rel="tooltip" title="Testing of Sentences">sentences</a>. When dialogue is being quoted in fiction, a new paragraph is used each time the person being quoted changed. </div> </body> </html>
Comments will be moderated and
rel="nofollow"
will be added to all links. You can wrap your coding with[code][/code]
to make use of built-in syntax highlighter.I made a few changes though:
On IE, the box would flash on the left side of the screen, then get updated. This is because you don't set the X & Y when you first fade in. This does the trick:
Change:
$('#tooltip').fadeIn('500');
$('#tooltip').fadeTo('10',0.9);
To:
$('#tooltip').css('top', e.pageY + 10 );
$('#tooltip').css('left', e.pageX + 20 );
$('#tooltip').fadeIn('500');
$('#tooltip').fadeTo('10',0.9);
and bam.
Also look for the comment by me earlier. It "solves" the problem of the tooltip coming up as undefined.
//Select all anchor tag with rel set to tooltip
$('a[rel=tooltip]').mouseover(function(e) {
//Grab the title attribute's value and assign it to a variable
var tip = $(this).attr('title');
//Remove the title attribute's to avoid the native tooltip from the browser
$(this).attr('title','');
//Append the tooltip template and its value
$(this).append('<div id="tooltip"><div class="tipHeader"></div><div class="tipBody">' + tip + '</div><div class="tipFooter"></div></div>');
//Show the tooltip with faceIn effect
$('#tooltip').fadeIn('500');
$('#tooltip').fadeTo('10',0.9);
}).mousemove(function(e) {
//Keep changing the X and Y axis for the tooltip, thus, the tooltip move along with the mouse
$('#tooltip').css('top', e.pageY - (parseInt(jQuery(this).offset().top)-25));
$('#tooltip').css('left', e.pageX - (parseInt(jQuery(this).offset().left)-25));
}).mouseout(function() {
//Put back the title attribute's value
$(this).attr('title',$('.tipBody').html());
//Remove the appended tooltip template
$(this).children('div#tooltip').remove();
});
I'm trying to implement this on a multiple select, is this possible?
<select multiple id="select1">
<option>Option 1</option>
<option>Option 2</option>
<option >Option 3</option>
</select>
Thanks,
Paolo
$(this).append to $(body).append
$(this).children( ...
to
$(body).children( ...
to remove the tooltip properly on fade out.
$('map').mouseover(function(e) { = WORKING
$('area').mouseover(function(e) { = NOT WORKING
If anyone could help ?
Thanks