2010-08-09 7 views
3

Nous appelons une méthode .live() comme ceci:Quelle est la syntaxe correcte pour la liaison `.live()` de la méthode 'hover'?

$('.link').live('click', loadContent); 

Mais qu'en est si je liant à hover au lieu, qui appelle à deux fonctions séparées par une virgule? Quand je mets ceci:

$('.thumb.dim').live('hover', function(){$(this).removeClass('dim');}, function(){$(this).addClass('dim');}); 

L'événement mouseenter ne déclenche la première fonction ci-dessus (removeClass('dim')), mais mouseleave rien ne se passe. Y a-t-il un moyen correct d'écrire ceci?

Répondre

2

live ne prend un rappel, mais vous pouvez vérifier les informations d'événement transmis pour le type de rappel:

$('.thumb.dim').live('hover', function(e) { 
    if (e.type == 'mouseover') { 
     $(this).removeClass('dim'); 
    } else { 
     $(this).addClass('dim'); 
    } 
}); 

Alternativement puisque vous simplement la suppression/ajout d'une classe, vous pouvez le faire;

$('.thumb.dim').live('hover', function(e) { 
    $(this).toggleClass('dim'); 
}); 
2

Deviner - Je ne sais pas comment jQuery le fait en interne.

L'événement ne se déclenche-t-il pas parce qu'il n'est plus éteint? Vous pouvez essayer d'ajouter une classe dim_disabled ou similaire et un événement de souris pour dim_disabled pour restaurer le dim?

0

Duh! La fonction supprime la classe qui déclenche la fonction! Une fois que la classe 'dim' est supprimée sur mouseenter, this ne répond plus à un événement mouseout!

Questions connexes