21

I'm trying to swap two images with jQuery. Using the hover event I tried:

$("#wlt-DealView .buyButton_new").mouseover(function(e){
    $('.buyButton_new').css('background-image','url(../images/compra_mouseOver.png)');
});
$("#wlt-DealView .buyButton_new").mouseout(function(e){
    $('.buyButton_new').css('background-image','url(../images/compra_normal.png)');
});

But the image is not showing and after I get the mouse from it, it triggers the second event. It should update with the first image, but it doesn't.

You can have a look here: http://107.20.186.103/deals/cuerpon.

Hover the BUY button.

tw16
  • 29,215
  • 7
  • 63
  • 64
Gigg
  • 1,019
  • 3
  • 11
  • 20

6 Answers6

28

The image disappears because jQuery replaces the CSS locally and not from your stylesheet as before. So your path needs to be updated to reflect the path from your HTML file to your image. If your HTML file was in your root folder and "images" a folder within that root, the code would be like this:

$('.buyButton_new').css('background-image','url(images/compra_mouseOver.png)');

messed me up at first too.

ЯegDwight
  • 24,821
  • 10
  • 45
  • 52
BrianG
  • 281
  • 3
  • 3
  • This solution helped me because I had a semi colon on the end of the url() statement. I removed the semi colon and the image changed correctly. – Craig Howard Apr 13 '14 at 16:02
4

Try this, the code is better anyway:

$("#wlt-DealView .buyButton_new").hover(
    function()
    {
        $(this).css('background-image','url(../images/compra_mouseOver.png)');
    },
    function()
    {
        $(this).css('background-image','url(../images/compra_normal.png)');
    }
);
JNDPNT
  • 7,445
  • 2
  • 34
  • 40
2

If i try to enter the URL http://107.20.186.103/images/compra_mouseOver.png manually in my browser, i get a 404.

http://107.20.186.103/deals/images/compra_mouseOver.png gets a strange 500...

I think you should get your image files ready and it will work. You may also tweak your code by using the jQuery.hover function.

Phil Rykoff
  • 11,999
  • 3
  • 39
  • 63
  • the relative path was working for the default css, but after jquery was updating it, it wasn't working. I had to change it. Thank's – Gigg Oct 20 '11 at 07:17
  • 2
    @Iosub Also, maybe you'd want to consider changing classes instead of the inline css? By using these: `.addClass()` `.removeClass()` `.toggleClass()` Changing class would make it simpler... at least in my mind. Plus you could change the image url's from css file. Also, googling for example: "addclass jquery" will give you directions to jquery api which will give you more information. – Joonas Oct 20 '11 at 07:21
1

The syntax is as follows

$(element).hover(function(){
  $(this).css(whatever);
}, function(){
  $(this).css(whatever);
});
aperture
  • 2,905
  • 3
  • 35
  • 58
1

add the full image path and check

$("#wlt-DealView .buyButton_new").hover(
    function()
    {
        $(this).css('background-image','url(http://107.20.186.103/themes/classic/images/compra_mouseOver.png)');
    },
    function()
    {
        $(this).css('background-image','url(http://107.20.186.103/themes/classic/images/compra_normal.png)');
    }
);
Amila
  • 1,423
  • 1
  • 11
  • 17
0

Use jQuery.hover instead of mouseover and mouseout

twsaef
  • 2,082
  • 1
  • 15
  • 27