[phpBB Debug] PHP Warning: in file [ROOT]/ext/tas2580/seourls/event/listener.php on line 213: Undefined array key "FORUM_NAME"
jQuery toggleClass - REDAXO Forum
Hallo,

Wir haben in letzter Zeit festgestellt, dass die Kommunikation via Slack viel schneller und zielführender ist als ein Beitrag im Forum. Aufgrund der neuen und besseren Möglichkeiten der Kommunikation haben wir uns entschlossen das Forum nur noch als Archiv zur Verfügung zu stellen. Somit bleibt es weiterhin möglich hier nach Lösungen zu suchen. Neue Beiträge können nicht mehr erstellt werden.

Wir empfehlen, für deine Fragen/Probleme Slack zu nutzen. Dort sind viele kompetente Benutzer aktiv und beantworten jegliche Fragen, gerne auch von REDAXO-Anfängern! Slack wird von uns sehr intensiv und meistens "rund um die Uhr" benutzt :-)
Selbst einladen kannst Du dich hier: https://redaxo.org/slack/
Benutzeravatar
webghost
Beiträge: 266
Registriert: 6. Okt 2010, 20:10
Kontaktdaten: Website

jQuery toggleClass

3. Jan 2014, 11:09

leider bin ich in JS und jQuery nicht fit, daher mal eine Frage an die Profis

ich blende wie folgt ein Element ein

Code: Alles auswählen

<span class="clipper" onclick="$('#subnav1').toggleClass('on')"></span>
<div class="subnav" id="subnav1">
Mit "on" bekommt der div display:block. Dies mache ich mehrfach auf einer Seite. Wie kann ich durch Klick auf body alle Elemente wieder schliessen, also das "on" wieder entfernen von allen?

ich dachte eigentlich so sollte es funktionieren, da geht aber auch nichts mehr auf

Code: Alles auswählen

<body lang="de" onclick="$('.subnav').removeClass('on')">
gibts da eine einfache Möglichkeit?

Benutzeravatar
anita
Beiträge: 711
Registriert: 25. Jan 2007, 10:25
Wohnort: Finsterwalde

Re: jQuery toggleClass

3. Jan 2014, 13:56

hallo,

toggleClass() ist eine jQuery-Klasse, dementsprechend musst Du sie einsetzen.

versuch mal folgendes:

gib dem body id="body";
in Deinem Javascript notierst Du

Code: Alles auswählen

$( "#body" ).click(function() {
$('#subnav1').toggleClass('on');
});
ist ungetestet
Gruß Anita

javanita engineering, immer eine zündende Idee
http://www.javanita.com

Benutzeravatar
webghost
Beiträge: 266
Registriert: 6. Okt 2010, 20:10
Kontaktdaten: Website

Re: jQuery toggleClass

3. Jan 2014, 14:18

hallo,

bei Deinem Beispiel schalten ja alle um. Ich will aber alle entfernen. Also wär das etwa so

Code: Alles auswählen

$( "#body" ).click(function() {
$('.subnav').removeClass('on');
});
geht aber auch nicht, nehme an weil das betreffende Element sich ja auch im Body befindet. Somit kann ich keines mehr öffnen, weil der Klick auf öffnen bzw. toggle zugleich auch ein Klick auf body also remove ist.

wie umgehe ich das Problem, mit Abfragen?

Benutzeravatar
Xong
Beiträge: 2081
Registriert: 5. Jun 2008, 08:30
Wohnort: Halle (Saale)

Re: jQuery toggleClass

3. Jan 2014, 14:35

Hi!
webghost hat geschrieben:[...] weil das betreffende Element sich ja auch im Body befindet. Somit kann ich keines mehr öffnen, weil der Klick auf öffnen bzw. toggle zugleich auch ein Klick auf body also remove ist.

wie umgehe ich das Problem, mit Abfragen?
Mit stopPropagation().
LG,
Xong

[ externes Bild ] Määääääääääääääääääääääääh!

Benutzeravatar
webghost
Beiträge: 266
Registriert: 6. Okt 2010, 20:10
Kontaktdaten: Website

Re: jQuery toggleClass

3. Jan 2014, 15:37

super das wars, danke

Code: Alles auswählen

            $("nav").click(function(event) {
                event.stopPropagation();

                $("body").click(function() {
                    $('.subnav').removeClass('on');
                });

            });
vielleicht könntest Du mir noch einen weiteren Denkanstoss geben? :roll:

wenn jetzt "#subnav1 .subnav" offen ist und ich öffne "#subna2 .subnav" wie erreiche ich das sich dabei #subnav1 zugleich schliesst? also allen Elementen mit .subnav das .on wieder entfert wird ausser natürlich bei #subnav2, wobei es natürlich nicht immer das selbe Element ist.
Sind bestimmt Basic's aber ich tu mich da echt schwer

Benutzeravatar
anita
Beiträge: 711
Registriert: 25. Jan 2007, 10:25
Wohnort: Finsterwalde

Re: jQuery toggleClass

3. Jan 2014, 17:10

das hört sich so an, als ob Du einen Accordion-Effekt haben möchtest; dann nimm doch gleich jQuery UI Accordion.
Gruß Anita

javanita engineering, immer eine zündende Idee
http://www.javanita.com

Benutzeravatar
webghost
Beiträge: 266
Registriert: 6. Okt 2010, 20:10
Kontaktdaten: Website

Re: jQuery toggleClass

3. Jan 2014, 23:04

ne das passt nicht weil ja immer ein Element sichtbar ist

Ingo
Beiträge: 782
Registriert: 24. Jun 2010, 00:34

Re: jQuery toggleClass

4. Jan 2014, 00:15

http://api.jquery.com/category/traversi ... traversal/
Was du suchst ist vermutlich .parent() / .siblings() / .each() oder was in die Richtung. Ist ohne HTML schwer zu sagen.

Benutzeravatar
webghost
Beiträge: 266
Registriert: 6. Okt 2010, 20:10
Kontaktdaten: Website

Re: jQuery toggleClass

4. Jan 2014, 12:57

ich hab auch damit noch keine Lösung gefunden

Code: Alles auswählen

<li class="hassub" id="active">
    <a href="">test</a>
    <span class="clipper" onclick="$('#subnav1').toggleClass('on')"></span>
    <div class="subnav on" id="subnav1">
        <span class="closer" onclick="$('#subnav1').removeClass('on')"></span>
        <ul class="lev2">
            <li><a id="current" href="">Konsumkredite</a></li>
            <li><a href="">test</a></li>
            <li><a href="">test</a></li>
        </ul>
    </div>
</li>
<li class="hassub">
    <a href="">test</a>
    <span class="clipper" onclick="$('#subnav2').toggleClass('on')"></span>
    <div class="subnav" id="subnav2">
        <span class="closer" onclick="$('#subnav2').removeClass('on')"></span>
        <ul class="lev2">
            <li><a href="">test</a></li>
            <li><a href="">test</a></li>
            <li><a href="">test</a></li>
        </ul>
    </div>
</li>
dachte was in der Richtung, aber klappt nicht

Code: Alles auswählen

$(".clipper").click(function(event) { //.clipper - alle betreffende Buttons

    var stop = $(this).next(".subnav"); // nächster auszuschliessender div.subnav

    $(stop).click(function(event) {
        event.stopPropagation();

        $("body").click(function() {
            $('.subnav').removeClass('on');
        });
    });
});

Benutzeravatar
RexDude
Beiträge: 2543
Registriert: 22. Apr 2010, 11:24

Re: jQuery toggleClass

4. Jan 2014, 13:04

Nur mal eine Empfehlung am Rande: Deine JavaScript Logik sollte sich nicht im HTML Markup befinden. Besser ist es sich eine init.js o.ä. zu machen wo man on document ready sein JS Logik reinpackt. Vielleicht löst du dein Problem damit auch schon.

Benutzeravatar
webghost
Beiträge: 266
Registriert: 6. Okt 2010, 20:10
Kontaktdaten: Website

Re: jQuery toggleClass

4. Jan 2014, 13:34

da das ganze in php generiert wird geht es mir halt einfacher mit onclick, da kann ich gleich in php alles durch nummerieren. Sonst brauche ich da wieder js Funktionen und genau damit hab ich so meine Schwierigkeiten.
Ausserdem sollte das ja nur eine nebensächliche Funktionalität werden... nun ja - ich sollte mich wohl wirklich mal eingehender damit befassen.

Benutzeravatar
Xong
Beiträge: 2081
Registriert: 5. Jun 2008, 08:30
Wohnort: Halle (Saale)

Re: jQuery toggleClass

4. Jan 2014, 14:31

Hi!
webghost hat geschrieben:vielleicht könntest Du mir noch einen weiteren Denkanstoss geben? :roll:

wenn jetzt "#subnav1 .subnav" offen ist und ich öffne "#subna2 .subnav" wie erreiche ich das sich dabei #subnav1 zugleich schliesst? also allen Elementen mit .subnav das .on wieder entfert wird ausser natürlich bei #subnav2, wobei es natürlich nicht immer das selbe Element ist.
Sind bestimmt Basic's aber ich tu mich da echt schwer
Du hast dir ja im Prinzip selbst schon die Antwort gegeben. Einfach alle "on"s entfernen und dann das geklickte Element damit versehen.
LG,
Xong

[ externes Bild ] Määääääääääääääääääääääääh!

Benutzeravatar
webghost
Beiträge: 266
Registriert: 6. Okt 2010, 20:10
Kontaktdaten: Website

Re: jQuery toggleClass

4. Jan 2014, 15:35

es ist aber das Nachbarelement und mit next() oder siblings() wollte es bisher noch nicht so ganz klappen. Ich setz mich später nochmal ran, kann ja nicht sein dass ich das jetzt nicht hin bekomme :? . und will es dann doch noch so umschreiben wie RexDude meinte.

Benutzeravatar
anita
Beiträge: 711
Registriert: 25. Jan 2007, 10:25
Wohnort: Finsterwalde

Re: jQuery toggleClass

4. Jan 2014, 17:55

webghost hat geschrieben:ne das passt nicht weil ja immer ein Element sichtbar ist
das stimmt nicht ganz; mit

Code: Alles auswählen

active: false
sind alle zugeklappt
Gruß Anita

javanita engineering, immer eine zündende Idee
http://www.javanita.com

Benutzeravatar
webghost
Beiträge: 266
Registriert: 6. Okt 2010, 20:10
Kontaktdaten: Website

Re: jQuery toggleClass

5. Jan 2014, 14:52

okay, das hatte ich übersehen. Dennoch finde ich es nicht optimal für diesen Zweck. Will auch unbedingt toggle verwenden um dann per css transition einsetzen zu können.

ich konnte es jetzt so lösen

Code: Alles auswählen

$(document).ready(function($) {
    // ein und ausblenden
    $(".clipper").click(function() {
        $(".clipper").not(this).next('.subnav').removeClass('on');
        $(this).next('.subnav').toggleClass('on');
    });
    // button zum schliessen
    $(".closer").click(function() {
        $(this).parent('.subnav').removeClass('on');
    });
    // bei klick auf Body alles zu
    $(".clipper").click(function(event) {
        event.stopPropagation();

        $("body").click(function() {
            $('.subnav').removeClass('on');
        });
    });
});
danke für eure Hilfe

Zurück zu „Sonstiges“