2010-04-14 10 views
2

la deuxième fonction ne fonctionne pas?ne peut pas obtenir jquery hover pour travailler avec .live()

$('.edit_hover').live('hover', 
    function(e){   
     $(this).stop(); 
     var half_width = ($(this).css('width').slice(0, -2))/2; 
     var half_height = ($(this).css('height').slice(0, -2))*0.3; 
     console.log(half_width); 
     var top = ($(this).position().top) + half_height; 
     var left = ($(this).position().left) + half_width; 
     $('#edit_hover').css('top', top).css('left', left).fadeIn(300); 
     //add overlay 
     $(this).css('position', 'relative').append('<div class="edit_overlay" style="position: absolute; top:0px; left:0px; height:100%; width: 100%; background: #999; opacity: 0.5;"></div> ') 
    }, 
    function(){ 
     $(this).stop(); 
     $(this).find('.edit_overlay').remove(); 
     $('#edit_hover').fadeOut(300); 
    }); 

Répondre

11

live() prend seulement un gestionnaire, de sorte que vous ne pouvez pas utiliser hover (avant 1.4.1). Quoi qu'il en soit, c'est juste un raccourci pour mouseenter et mouseleave. Utilisez ces événements pour se lier à:

$('.edit_hover') 
.live('mouseenter',function(){}) 
.live('mouseleave',function(){}); 

Ou depuis jQuery 1.4.1:

$('.edit_hover').live('hover', function(event) { 
    if (event.type == 'mouseenter') { 
    // first function here 
    } else { 
    // second function here 
    } 
}); 
+0

+1 Merci! NB: J'ai dû changer 'mouseover' en 'mouseenter' pour que la 2ème partie de votre script fonctionne. – ILoveBrisbane

+0

@ILoveBrisbane: Droit. 'hover' lie 'mouseenter' et 'mouseleave', pas 'mouseover'. Merci de m'avoir fait remarquer ... corrigé :) –

+0

Toujours semble-t-il aussi le cas dans 1.6.2 – mplungjan

0

juste deviner: ne pas utiliser hover utilisation mouseover et mouseout:

$("...").live("mouseover", function() { 
    // .... 
}).live("mouseout", function() { 
    // ... 
}); 
+0

'' mouseover' et mouseout' ne fonctionnent pas de la même façon que '' mouseenter' et mouseleave' (les événements, «hover» est basé sur). –

0

Quelle version de jQuery? Vous devez utiliser jQuery 1.4.1 pour utiliser hover avec live. Ce n'était pas pris en charge dans les versions antérieures. Voir la section Avertissements du live documentation. Notez, cependant, que vous n'avez qu'un seul rappel et que vous devez différencier l'événement dans le rappel pour gérer le hover/out indépendamment.

$('.hoverme').live('hover', function(event) { 
    if (event.type == 'mouseover') { 
    // do something on mouseover 
    } else { 
    // do something on mouseout 
    } 
}); 
Questions connexes