webForumDet fria alternativet

Problem med en enkel sak som slideDown/slideUp hover function

JavaScript

6 svar · 647 visningar · startad av bikic

Medlem sedan juni 2006261 inlägg
Frågan#1

Hej alla!

Jag har en meny som kan se ut så här:


<ul>
	<li>Start</li>
	<li>Dropdown
		<ul>
			<li>Drop 1</li>
			<li>Drop 2</li>
			<li>Drop 3</li>
		</ul>
	</li>
	<li>End</li>
</ul>

Till detta använder jag mig av följande script, som bara är så basic:


$('ul.dropdown ul').css('display', 'none');

$('ul.dropdown li').hover(function () {

		$('ul', this).slideDown(250);

	}, function () {

		$('ul', this).slideUp(250);			
});

Vad som händer är att den visar submenyen med slideDownfunktionen, men så fort jag släpper den, så försvinner den bara, den borde göra en slideUp.

Vad gör jag för fel?

Medlem sedan juni 20019 519 inlägg
#2

var är ul.dropdown i din HTML kod? Är det den första <ul> elementet?

Kan dock inte återskapa det du säger: http://jsbin.com/omika4/

sen räcker det att du skriver:

$('ul.dropdown li').hover(function () {
    $('>ul', this).slideToggle(250);
});

Om du skall ha samma hastighet på din slide. (och kört >ul för att köra endast child som är ul mot this).

http://jsbin.com/omika4/2/

Medlem sedan juni 2006261 inlägg
#3

Jag fick löst det, hade med CSS:en att göra.

Medlem sedan juni 20019 519 inlägg
#4

bikic skrev:

Jag fick löst det, hade med CSS:en att göra.

Få man fråga vad du hade för CSS som ställde till detta problem?

Medlem sedan apr. 20003 174 inlägg
#5

Det verkar ju som om "hover" tappar eventet när du rör musen utanför själva <li> ..? Fungerar det likadant oavsett webbläsare? ..det luktar hasLayout. ;)

Testa att binda eventen var för sig med ex. mouseenter och mouseleave istället och se om du får samma resultat. :)
Ex:

$('ul.dropdown li').bind('mouseenter', function(){

	$('ul', this).slideDown(250);

}).bind('mouseleave', function(){

	$('ul', this).slideUp(250);			

});
Medlem sedan juni 20019 519 inlägg
#6

@Palle:

När man kör $(selector).hover(handlerIn, handleOut) är detsamma som $(selector).mouseenter(handlerIn).mouseleave(handlerOut); ( http://api.jquery.com/hover/ )

just as you know ;)

Medlem sedan apr. 20003 174 inlägg
#7

I know. :moose

voigtann1 skrev:

@Palle:

När man kör $(selector).hover(handlerIn, handleOut) är detsamma som $(selector).mouseenter(handlerIn).mouseleave(handlerOut); ( http://api.jquery.com/hover/ )

just as you know ;)

384 ms totalt · 3 externa anrop · v20260731065814-full.eb2a8c97
124 ms — deklarationer (db)
131 ms — hämta statistik (db)
126 ms — hämta tråd, inlägg och bilagor (db)