jQuery toggle open/close div ' s
Momentan habe ich ein Menü mit 3 links, die öffnet versteckte div ' s relevant, um sich selbst und nutzen das jquery-code (siehe unten), aber würde es gerne, dass wenn ein div ist bereits geöffnet, wenn eine zweite div wird eröffnet, dass seine schließt die ursprüngliche geöffnet div ...
dh wenn "foobox" ist öffnen und dann Benutzer klickt auf "foo2" öffnen "foobox2" "foobox" schließen
$('#foo').toggle(function(){
$('#foobox').animate({marginLeft: '354'}, 1000);
},
function(){
$('#foobox').animate({marginLeft: '0'}, 1000);
});
$('#foo2').toggle(function(){
$('#foo2box').animate({marginLeft: '354'}, 1000);
},
function(){
$('#foobox3').animate({marginLeft: '0'}, 1000);
});
$('#foo3').toggle(function(){
$('#foobox3').animate({marginLeft: '354'}, 1000);
},
function(){
$('#foobox3').animate({marginLeft: '0'}, 1000);
});
wie üblich danke im Voraus.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie das öffnen, fügen Sie eine neue Klasse zu, die angibt, dass es aktiv ist. Und jedes mal, wenn Sie öffnen, schließen Sie den aktiven.
Außerdem würde ich empfehlen ändern Sie Ihre HTML-und jQuery-so brauchen Sie nur einen event-handler.
Zum Beispiel anstatt diesen:
Könnten Sie tun:
Mit den folgenden jQuery:
.data()
? Sind Sie immer Fehler? Mit dem Einsatz vonconsole.log('test')
und eine Konsole in etwa Firebug, Sie sollten in der Lage sein, um herauszufinden, wo in deinem script es falsch läuft.Hinzufügen, auf alle foo-Elemente (#foo, #foo2, #foo3..) der Klasse foo
Auch fügen Sie die foobox-Elemente (#foobox, #foobox2, #foobox3..) der Klasse foobox
und dieses verwenden:
foobox
hinter Ihren verwandtenfoo
. Wenn allefoo
's sind in einem separatendiv
von allenfoobox
's funktioniert es nicht.Klassen, wie zum Beispiel
class="special"
und dann mithilfe von jQuery setzen, schließen oder reverse-animation-Aktion auf, die Klasse, die vor der Eröffnung der aktuellen Klasse, so dass alle Menüs mit der Klasse geschlossen und geöffnet werden.Nehme an, dein html ist
Und jQuery wie folgt
Beispiel auf JSFIDDLE.net
Geben ein Daten jedes mal, wenn Sie öffnen ein div, dann jedes mal, wenn Sie öffnen ein div-prüfen Sie auch, ob alle anderen divs haben
.data('open') == true
, wenn Sie so bedeutet es, dass Sie offen sind, so schließen Sie Sie und entfernen Sie den data-Wert.BEARBEITEN
Könnten Sie auch speichern Sie die geöffneten element auf eine variable, wie:
Dann, wenn Sie öffnen Sie eine andere box, schließen Sie einfach $opened_element. Wahrscheinlich muss es eine Globale variable, obwohl, so dass Ihr code.
Glaube ich, dass die Funktionalität, die Sie sprechen, ist überzogen http://docs.jquery.com/UI/Accordion