2012-04-02 14 views
0

Ich habe ein Problem mit einer jquery Funktion. Mein HTML sieht so aus, ich habe mehrere Elemente wie das folgende.Jquery Akkordeon Effekt

<div id="design"> 
<span class="flyout_hover">click me 
    <div class="flyout"> 
    show me 1 
    </div> 
</span> 
</div> 

<div id="seo"> 
<span class="flyout_hover">click me 
    <div class="flyout"> 
    show me 2 
    </div> 
</span> 
</div> 

<div id="mobil"> 
<span class="flyout_hover">click me 
    <div class="flyout"> 
    show me 3 
    </div> 
</span> 
</div> 

EDIT: Ich habe ein neues div um jedes Element hinzugefügt.

Dann habe ich diesen jQuery-Code verwendet, die ich hier gefunden: jQuery toggle - Close all except this

$(".flyout_hover").click(function() { 
    var index = $(this).index(); 
    $('.flyout').eq(index).toggle().siblings('.flyout').hide(); 
}); 

ich über die gleiche Wirkung wie in dem Beispiel haben will, wie ein Akkordeon. Aber wenn ich auf <.flyout_hover> nur die <.flyout> innerhalb der letzten <.flyout_hover> wird angezeigt, egal was < .flyout_hover> Ich klicke.

Ich denke, es hat etwas mit dem Index-Ding zu tun, aber ich habe eine harte Zeit, eine Lösung zu finden.

Mit freundlichen Grüßen

Vegar

+0

html scheint nicht richtig – Dips

+0

Meinst du etwas so: http://jsfiddle.net/4Wwnm/31/? Prost! –

+0

Ja, so etwas. Aber ich möchte nur das div.flyout öffnen/schließen, wenn Sie auf span.flyout_hover klicken. Wenn ein div.flyout bereits geöffnet ist, möchte ich, dass es geschlossen wird, wenn Sie auf einen anderen span.flyout_hover und gleichzeitig auf das div.flyout in der span.flyout_hover klicken, die Sie gerade zum Öffnen angeklickt haben. Wenn Sie wissen, was ich meine .. viele Flyouts hier .. :) –

Antwort

1
$(".flyout_hover").click(function() { 
    var index = $(this).index(); 
    $('.flyout').eq(index).toggle(); 
    $(this).siblings().children('.flyout').hide(); 
}); 

EDIT: Das ist, weil die .flyout keine Geschwister hat innerhalb des enthaltenden .flyout_hover Element. Du musst die Geschwister von .flyout_hover finden und dann ihre Kinder verstecken.

Fiddle hier: http://jsfiddle.net/3GXk6/5/

Auch vielleicht möchten Sie divs verwenden, anstatt der Spanne für .flyout_hover Elemente?

EDIT 2: Wenn Sie nur immer in seiner Mutter ein .flyout div haben, müssen Sie den Index nicht brauchen, und dann können Sie nur verwenden, um dies:

$(".flyout_hover").click(function() { 
    $('.flyout', this).toggle(); 
    $(this).siblings().children('.flyout').hide(); 
}); 

http://jsfiddle.net/e72hk/

EDIT 3: wenn man sie in divs wie in Ihrem editierte HTML-Code wickeln, können Sie dies nur tun, anstatt:

$(".flyout_hover").click(function() { 
    $('.flyout', this).toggle(); 
    $(this).parent('div').siblings('div').find('.flyout').hide();  
}); 

http://jsfiddle.net/e72hk/15/

+0

Ich habe das zum Funktionieren gebracht, wenn ich es genau so eingerichtet habe wie du es getan hast (und ich sollte), aber ich habe nicht berücksichtigt, dass jedes der vorher erwähnten Elemente (.flyout_hover und.Flyout) ist in einem anderen Div. Dadurch wird der Code irgendwie aufgebraucht. Wenn ich ein .flyout öffne, bleibt dieses geöffnet, wenn ich auf einem anderen .flyout_hover klicke. Ich dachte nicht, dass dies von Bedeutung wäre, da alle Elemente irgendwie in etwas anderes eingewickelt sind .. wie und und so weiter. Ich habe das HTML im Beispiel aktualisiert. Sorry für die Unannehmlichkeiten ..:/ –

+0

Ich gab auf, fand, dass es einfacher war, meinen HTML zu kneifen, als meinen Kopf gegen die jquerywall zu schlagen. Dank an alle für das Helfen! –

+0

@Vegar: Sorry, ich habe deinen vorherigen Kommentar bis jetzt nicht bemerkt ... kann das beheben, denke ich, indem ich die Geschwister des Elternteils des angeklickten .flyout_hover benutze - aber wenn du weitermachst, werde ich es dabei belassen . – Stefan

0

Ihre HTML-Code wie folgt aussehen annehmen. Demo here

<div class="flyout_hover">Div first </div> 
<div class="flyout_hover">Div second</div> 
<div class="flyout">Menu1 </div> 
<div class="flyout">Menu2 </div> 

.container { 
    display: none; 
} 
+0

Ja, ich verstehe das, aber gibt es eine Möglichkeit, den gleichen Effekt zu erzielen, wenn ich das HTML habe, wie ich es arrangiert habe? –

+0

können Sie Ihren HTML-Code aktualisieren, mindestens mit 2 Divs, so dass ich jquery aktualisieren kann. Im Moment weiß ich nicht, was Sie erreichen wollen. – Dips

+0

Ich habe meinen HTML-Code im obigen Beispiel aktualisiert, mein Problem ist, dass egal, welche span.flyout_hover ich klicke, nur das div.flyout im letzten span.flyout_hover angezeigt wird. –