2016-07-21 4 views
0

Ich habe den folgenden Code und versuche, ein Akkordeon-Panel von einem externen Link zu öffnen. Ich habe den Code als Beispiel von einer Website bekommen und es hat bis jetzt funktioniert, aber ich kann nicht herausfinden, wie das geht.Öffnen Sie ein Akkordeon-Panel von einem externen Link

jQuery:

jQuery(document).ready(function() { 
    function close_accordion_section() { 
     jQuery('.accordion .accordion-section-title').removeClass('active'); 
     jQuery('.accordion .accordion-section content').slideUp(300).removeClass('open'); 
    } 

    jQuery('.accordion-section-title').click(function(e) { 
     // Grab current anchor value 
     var currentAttrValue = jQuery(this).attr('href'); 

     if(jQuery(e.target).is('.active')) { 
      close_accordion_section(); 
     }else { 
      close_accordion_section(); 

      // Add active class to section title 
      jQuery(this).addClass('active'); 
      // Open up the hidden content panel 
      jQuery('.accordion ' + currentAttrValue).slideDown(300).addClass('open'); 
     } 

     e.preventDefault(); 
    }); 
}); 

HTML:

<div class="accordion"> 
     <div class="accordion-section"> 
      <a class="accordion-section-title" href="#section-1">Section 1: </a> 
      <div id="section-1" class="accordion-section-content"> 
       <p>Content goes here</p> 
      </div><!--end .accordion-section-content--> 
     </div><!--end .accordion-section--> 

     <div class="accordion-section"> 
      <a class="accordion-section-title" href="#section-2">Section 2: </a> 
      <div id="section-2" class="accordion-section-content"> 
       <p>Content goes here</p> 
      </div><!--end .accordion-section-content--> 
     </div><!--end .accordion-section--> 

Bisher habe ich den externen Link als versucht:

<a href="#section-2.active">Link</a> 

... und ein paar Dinge, ähnlich, aber noch keine Freude Unglücklicherweise. Ich habe auch mit der jQuery rumgespielt, bin aber auch nicht weitergekommen.

Ich habe nicht viel Erfahrung mit jQuery und ich versuche es zu lernen, wie ich gehe, also bitte seien Sie gründlich mit Antworten, damit ich lernen kann. Vielen Dank!

+0

Ich glaube, ich habe dich missverstanden. Gelöschte Antwort. Wenn Sie einen externen Link verwenden möchten, um Ihr Akkordeon zu öffnen, müssen Sie "$ location" aus angular verwenden, um es dynamisch zu machen, oder einfach eine "aktive" Klasse mit Ihrem Backend hinzufügen. – RaV

Antwort

1

Wenn die Seite Ihre ready Funktion lädt läuft, sollte dies das Akkordeon Abschnitt öffnen die URI hash bezieht sich auf:

jQuery(document).ready(function() { 
    // get the #section from the URL 
    var hash = window.location.hash; 
    // open accordion 
    jQuery(hash).slideDown(300).addClass('open'); 
    // set title to active 
    jQuery(hash).prev('.accordion-section-title').addClass('active'); 
    /* ... the rest of your code here */ 
}); 

Sie könnte eine leichte Leistungssteigerung, wenn man nicht das jQuery-Objekt erhalten Sie zweimal Sie können diese Ketten so ketten:

jQuery(hash).slideDown(300).addClass('open') 
       .prev('.accordion-section-title').addClass('active'); 
+0

Das ist fantastisch und funktioniert super, danke! Ich habe allerdings ein kleines Problem: Wenn ich versuche, den Link auf der gleichen Seite wie das Akkordeon zu verwenden, wird das neue Akkordeon-Panel erst geöffnet, wenn ich die Seite aktualisiere. Irgendwelche Ideen, wie ich das ohne die Aktualisierung erreichen könnte? Danke noch einmal. –

+0

@AlastairWarren Ich denke, du musst deinen 'e.preventDefault' an den Anfang des' Klick'-Aufrufs verschieben, dann kannst du 'window.location.hash = currentAttrValue;' hinzufügen, um den Hash zurück zur URL hinzuzufügen – JKirchartz

Verwandte Themen