2011-06-12 8 views
0

Cette question peut avoir été posée et je suis désolé si je l'ai raté,jQuery vol stationnaire

J'ai cette liste déroulante structure du menu:

<ul id="menu"> 
    <li><a>text1</a></li> 
    <li class="withchild"><a class="itemchild">text2</a> 
     <ul> 
     ... 
     </ul> 
    </li> 
    <li><a>text3</a></li> 
</ul> 

Je change de fond de itemchild au hover.

$("li.withchild ul").hover(function(){ 
    $(this).parent().find('.itemchild').css('background','the new background'); 
}, 
function(){ 
    $(this).parent().find('.itemchild').css('background','the old background'); 
}); 

Et le CSS pour li.withchild a.itemchild:hover{the new background}

Mon problème: Si je passe la souris sur .itemchild les changements de fond, puis passe la souris sur

li.withchild ul, fond de .itemchild reste avec le nouveau fond. Mais si je passe la souris

li.withchild ul sur .itemchild l'arrière-plan revient à l'arrière-plan.

Quelle est la meilleure façon de contourner ce problème?

+1

Avez-vous besoin d'utiliser javascript pour ça? – cusimar9

+0

Eh bien oui parce que je ne vois pas comment je pourrais le faire avec CSS: 'li.withchild ul: hover {/ * changer .itemchild fond * /}'? – Sparkup

+0

Eh bien, c'est exactement le comportement pour lequel vous l'avez codé. Semble juste pour moi. Quel était le comportement que vous vouliez qu'il fasse? –

Répondre

1

Si vous voulez avoir .itemchild afficher le nouveau arrière-plan lorsque votre souris survole soit .itemchild OU li.withchild ul, la meilleure façon serait probablement d'attacher le vol stationnaire à l'élément parent:

$("li.withchild").hover(function(){ 
    $(this).find('.itemchild').css('background','the new background'); 
}, 
function(){ 
    $(this).find('.itemchild').css('background','the old background'); 
}); 

Ou, vous pourrait d'abord envelopper li.withchild ul et .itemchild dans un nouveau div de leur propre avec wrapAll(), puis attacher l'événement à cela. Est-ce que je comprends votre question correctement?

+0

Oui, vous l'êtes. Mais je pourrais le faire avec CSS, mon problème serait dans votre cas quand je survolerai li.withchild ul l'arrière-plan retournerait à l'original. Je vais configurer un jsfiddle. – Sparkup

+0

Si vous attachez l'événement au parent 'li.withchild' (pas' li.withchild ul') alors je pense que cela devrait fonctionner comme vous le souhaitez. –

+0

Vous avez raison, merci. – Sparkup