Hi,

I'm appending elements to a list and want to attach a hover-event
(show or hide image) to links inside of that list-element. The HTML
ist:

<ul class="removable">

                <li><a href="#">1<img style="display: none;" 
src="icon_remove.gif" /
></a></li>
                <li><a href="#">2<img style="display: none;" 
src="icon_remove.gif" /
></a></li>
                <li><a href="#">3<img style="display: none;" 
src="icon_remove.gif" /
></a></li>
                <li><a href="#">4<img style="display: none;" 
src="icon_remove.gif" /
></a></li>

</ul>

And here is the jQuery:

$("ul.removable li a").hover(
        function(){
                $('img', this).fadeIn("fast");
        },
        function(){
                $('img', this).fadeOut("fast");
        }
);


Works like a charm. Until I add list-elements. The most elegant way to
work around that seems to be event delegation, which I was able to use
when removing
list-elements:

$("ul.removable").click(function(event){
        if($(event.target).parent().is('li'))
                $(event.target).fadeOut("fast");
        return false;
});

Now the question: How does this work with hover(over, out)? It should
have been something like:

$("ul.removable").hover(
        function(event){
                if($(event.target).parent().is('li'))
                {
                        $(event.target).children().fadeIn("fast");
                }
        },
        function(event){
                ...
        }
);

But it just notices that I'm hovering the unordered list. I'm now
thinking that event delegation simply doesn't work with hover and came
up with this
(thanks to jQuery 1.3.1):


// show "remove me"-Icons (attached with .live)
$("ul.removable li a").live("mouseover",
        function(){
                $('img', this).fadeIn("fast");
        }
);

// show "remove me"-Icons (attached with .live)
$("ul.removable li a").live("mouseout",
        function()
        {
                $('img', this).fadeOut("fast");
        }
);

I'm eager to learn how to write more elegant and simple jQuery, so:
Any improvements?

Thanks, Steffen

Reply via email to