2017-01-10 4 views
0

Ich muss Plone4 bei der Arbeit verwenden, was der Entwicklung viele Einschränkungen auferlegt. Die aktuelle Bootstrap-Version auf unserer Plone-Installation ist 2.3.2. Auf Wunsch habe ich eine Seite mit einigen Zeilen des Textes erstellt, die klickbar sind, um ein Akkordeon-Panel zu haben. Neben dem Text habe ich einen Dropdown-Pfeil, der die Richtung ändert, je nachdem, ob das Akkordeon-Panel geöffnet ist oder nicht. Die einzige Sache, mit der ich nicht zufrieden bin, ist die Tatsache, dass, wenn Sie auf ein anderes Akkordeonfeld klicken, das Pfeilbild auf dem zuvor geöffneten gleich bleibt. Gibt es eine Möglichkeit, dieses Verhalten zu beheben? Mein Code:Bildquelle wechseln onclick accordion

HTML:

<div class="accordion-group top"> 
    <div class="accordion-heading"> 
    <a id="collapse01" class="accordion-toggle" data-toggle="collapse" data-parent="#timeline-accordion" href="#preferred-name">Indicate "Preferred Name" in HR Self-Service<img id="arrow01" src="/arrow-down" alt="Indicates a dropdown for additional information" /> 
    </a>   
    <div class="green-bg-gradient color-block col-9 jan16"></div>  
    </div><!-- /heading --> 
    <div id="preferred-name" class="accordion-body collapse"> 
    <div class="accordion-inner">Completed 10/06/16</div>  
    </div><!-- /collapsed --> 
    </div><!-- /group --> 

jQuery:

jqbs("a#collapse01").click(function() { 
    if (jqbs('img#arrow01').attr('src')==='/arrow-up') { 
    jqbs('img#arrow01').attr('src', '/arrow-down') 
    } else { 
    jqbs('img#arrow01').attr('src', '/arrow-up') 
    } 
    }); 

Vielen Dank für Beratung im Voraus!

+1

Wenn Sie ein neues Panel öffnen, schließt es alle anderen? Wenn dem so ist, wenn Sie allen Bildern eine Klasse geben, können Sie 'jqbs ('. Arrows') .attr ('src', '/ arrow-down');' ausführen, um ihnen den ganzen Pfeil nach unten zu geben (und so fängt alle auf, die geöffnet wurden und sind jetzt geschlossen. – ADyson

+0

Ja, wenn Sie ein anderes Panel öffnen, schließt es automatisch diejenigen, die geöffnet werden. Ich hatte einen ähnlichen Ansatz, ich habe überprüft, ob das Panel die Klasse "in" hat, was offen bedeutet. Aber aus irgendeinem Grund (Bootstrap? Plone?) Ändert es alle Pfeile. – MP38

+0

Nun, das macht nichts, denn dann in der nächsten Zeile ändern Sie die, die zurück zum/Pfeil-nach-Bild öffnet. Also die Reihenfolge ist "ändern Sie alle von ihnen zu" geschlossen ", dann ändern Sie die, die geöffnet wird zu" öffnen ". – ADyson

Antwort

0

Wenn Sie Ihre Bilder eine Klasse geben, etwa wie folgt:

<img id="arrow01" class="arrow" src="/arrow-down" alt="Indicates a dropdown for additional information" /> 

dann können Sie das Klick-Ereignis behandeln und den Pfeil in geeigneter Weise auf jedem Satz. Dies funktioniert, weil, wenn das Akkordeon zum Öffnen eines Panels angeklickt wird, es annimmt, dass alle anderen geschlossen sind, so dass es alle Pfeile geschlossen hat, und dann zuletzt dasjenige öffnet, das sich auf das gerade angeklickte Panel bezieht.

Beachten Sie auch, dass ich das Klickereignis geändert habe, um Klicks auf alle Akkordeonbedienfelder zu bearbeiten. Ihr vorhandenes Beispiel wurde nur mit dem obersten Feld behandelt, da es eine ID und keine Klasse verwendet.

jqbs(".accordion-toggle").click(function() { 
    if (jqbs('.arrow', this).attr('src') === "arrow-up") { //this panel is already open 
     jqbs('.arrow', this).attr('src', '/arrow-down'); //show down arrow (for closed panels) 
    } 
    else { //open this panel 
     jqbs('.arrow').attr('src', '/arrow-down'); //make them all look closed 
     jqbs('.arrow', this).attr('src', '/arrow-up'); //make this one look open 
    } 
}); 
+0

Danke, es funktioniert, wie ich will – MP38

1

Ich weiß nicht, ob Sie jQuery verwenden können. Es könnte mit CSS-Selektor erfolgen:

$('img[src=/arrow-up]').attr('src', '/arrow-down'); 

Setzen Sie diesen Code in das Click-Ereignis, können Sie alle Pfeile ändern bis Pfeile nach unten, dann können Sie das Ereignis Fokus ändern von unten nach oben.