I\'m using jQuery to toggle the visibility of a
Two things:
If you're going to use both mouseenter
and mouseleave
I'd suggest using the hover() function; and
When using triggered animations it's a good habit to get into to use the stop() method.
So:
$("div.someclass").hover(function() {
$("...").stop().fadeIn("slow");
}, function() {
$("...").stop().fadeOut("slow");
});
Note: replace "..."
with the appropriate selector for what you're toggling and use the appropriate effect (I'm using fade here). Also, this
in an event handler refers to the source of the event.
Aside from the correct answer by Cletus, i'd like to point out that using mouseenter
and mouseleave
events is not wrong. The trick only resides into the stop()
method, in fact we could still do:
$("div.someclass").on("mouseenter", function() {
$("...").stop().fadeIn("slow");
});
$("div.someclass").on("mouseleave", function() {
$("...").stop().fadeOut("slow");
});
Here is a jsFiddle example :)
You can use the more common mouseover
/mouseout
events to get a hover event that doesn't fire on internal mouse movements.
But don't use toggle
on a mouse event, it can easily go wrong if eg. the mouse is over the element at page load time, or the mouse leaves the browser (which can allow the mouse to leave the bounds of the element without firing a mouseout
). Have separate function for over
which shows the content, and out
which hides it.
Better: just use the hover() method which is meant for exactly this purpose.