2013-06-25 52 views
1

我正在调换悬停时的img src。通常我会用:jQuery on('hover')事件替换

$('#img').hover(function() { 
    $(this).attr('src', 'http://www.example.com/new-img.jpg'); 
}); 

不过,我通过Ajax加载的内容,以便通常我会用:

$('#main').on('hover', '#img', function() { 
    $('#img').attr('src', 'http://www.example.com/new-img.jpg'); 
}); 

但我读的是在(“悬停”,.. )在jQuery 1.8中被弃用,并在1.9(jQuery Docs)中被删除,这正是我目前使用的。没有任何人有任何工作,除了使用:

$('#main').on('mouseenter', '#img', function() { 
    $('#img').attr('src', 'http://www.example.com/new-img.jpg'); 
}); 

$('#main').on('mouseleave', '#img', function() { 
    $('#img').attr('src', 'http://www.example.com/old-img.jpg'); 
}); 
+2

什么是使用的mouseenter和鼠标离开的问题? –

+0

没问题,我只是想看看是否有人有更简单/更简单的解决方法。 –

回答

5

不,你需要做两个调用。但对于加jQuery的点,你可以把它们连:

$('#main').on('mouseenter', '#img', function() { 
    $('#img').attr('src', 'http://www.example.com/new-img.jpg'); 
}).on('mouseleave', '#img', function() { 
    $('#img').attr('src', 'http://www.example.com/old-img.jpg'); 
}); 

而且如下本杰明评论,可以进一步优化(你会看到老式的Javascript点这段时间):

$('#main').on('mouseenter', '#img', function() { 
    this.src = 'http://www.example.com/new-img.jpg'; 
}).on('mouseleave', '#img', function() { 
    this.src = 'http://www.example.com/old-img.jpg'; 
}); 
+2

“新增jQuery点”,让我轻笑。 – casraf

+0

在这种情况下链接变得不那么意义,然后只是将多个事件传递到一个'.on()'调用。就像Shaddow的回答一样。 – kmfk

+3

@kmfk但是这种方式不支持事件委托。 “我正在通过Ajax加载内容” – lonesomeday

2

可以将多个事件,然后检查event.type这样的:

$('#main').on('mouseenter mouseleave', '#img', function(e) { 
    $(this).attr('src', 'http://www.example.com/' + (e.type == 'moseenter' ? 'new-img.jpg' : 'old-img.jpg')); 
}); 

jsFiddle

您还可以使用switch-caseif/else

$('#main').on('mouseenter mouseleave', '#img', function(e) { 
    switch(e.type) { 
     case 'mouseenter': 
      $(this).attr('src', 'http://www.example.com/new-img.jpg'); 
      break; 
     case 'mouseleave': 
      $(this).attr('src', 'http://www.example.com/old-img.jpg'); 
      break; 
    } 
} 
1

这是一种替代方法不涉及JavaScript的根本:

而是采用了src<img>属性使用DIV,给该分区的相同的ID(记得给它正确的宽度和高度)。

在你的CSS,给那div一个background-image是这样的:

#img{ 
    background-image: url('http://www.example.com/old-img.jpg'); 
} 

:hover改变它

#img:hover{ 
    background-image: url('http://www.example.com/new-img.jpg'); 
} 

fiddle

+0

那么如果我想使用CSS,我可能只是创建一个精灵,并更改'background-position'以加快加载速度;)。 ..但这更多的是好奇心。 –

+2

@pennstate_fanboy啊,好吧,我以为你不知道这种技术。如果你只是改变图像源,这比jQuery选项更好。特别是与代表团。 –

+0

诚然,就像我说的,更多的只是一种好奇心。我还有一些其他事件在同一个'hover'上触发,所以我想我只是将img src更改与它相关联。 –