2016-06-17 13 views
0

Ich habe ein jQuery Akkordeon und mein Problem ist zweifach.jQuery Akkordeon Gitter, das sich in voller Breite öffnet

  1. Wenn Sie auf die Personen klicken Sie nennen das div zu schließen (nachdem Sie geklickt haben, es zu öffnen) es schließt dann das ganze Fenster nach oben gleitet. Ich möchte nicht, dass es das ganze Fenster hochgleitet.

  2. Wenn Sie auf das Bild der Person klicken, um das div zu öffnen, und dann klicken, um es zu schließen, schließt das div, öffnet sich dann aber wieder und das gesamte Fenster wird nach oben verschoben.

Meine jQuery:

jQuery(function($){ 
$(document).ready(function() { 
    // do something... 
    function close_accordion_section() { 
jQuery('.accordion .accordion-item .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(); 
}); 
}); 
}); 

Und mein HTML sieht aus wie:

<div class="accordion"><!-- THUMBNAIL --> 
<div class="accordion-item"> 
<a class="accordion-section-title" href="#accordion-1"> 
<img src="http://placehold.it/150x150" alt="First Last" width="150" height="150" /> 
</a> 

<span class="accordion-section-name"> 
<a class="accordion-section-title" href="#accordion-1">First Name</a></span> 
<span class="accordion-section-expertise">Expertise</span> 
</div> 
<!--end .accordion-item--> 
<!-- ABOUT --> 

<div id="accordion-1" class="accordion-section-content"> 
<div class="advisors"> 
<ul class="advisors"> 
    <li>Marketing and Communications</li> 
    <li>Sales and Business Development</li> 
    <li>Finance</li> 
    <li>Startup Strategy</li> 
</ul> 
</div> 
<div class="about"> 
<p class="about">About</p> 
Biography 
</div> 

Weiß jemand, warum dies geschieht?

Edited neue Funktion hinzufügen:

jQuery(function($){ 
$(document).ready(function() { 
    // do something... 
    function close_accordion_section() { 

jQuery('.accordion .accordion-item .accordion-section-title').removeClass('active'); 
jQuery('.accordion .accordion-section-content').slideUp(300).removeClass('open'); 
} 

    jQuery('.accordion-section-title').click(function(e) { 
e.preventDefault(); 

var currentAttrValue = jQuery(this).attr('href'); 
    currentAttrValue = currentAttrValue.substring(1, currentAttrValue.length); 

jQuery("#" + currentAttrValue).slideToggle(); 


    }); 
    }); 
return false; 
    }); 

Das gesamte Fenster gleitet immer noch für mich.

+0

Sie möchten nur den "# Akkordeon-1" Inhalt nach rechts schieben? wenn es offen ist, schließe das. und umgekehrt? – Samir

Antwort

0

hinzufügen return false; nach e.preventDefault();

0

Hope this für Sie arbeiten,

jQuery('.accordion-section-title').click(function(e) { 
    e.preventDefault(); 

    var currentAttrValue = jQuery(this).attr('href'); 
     currentAttrValue = currentAttrValue.substring(1, currentAttrValue.length); 

    jQuery("#" + currentAttrValue).slideToggle(); 
}); 
+0

Dies hat die Wiederaufnahme des Divs beim Klicken auf das Bild verhindert! Vielen Dank! Das ganze Fenster gleitet immer noch nach oben, nachdem das Div geschlossen hat. Obwohl ich diese Funktion auf mehreren Seiten verwende, und nicht alle von ihnen haben den Namen nur das Bild. Und auf diesen Seiten öffnet sich das div jetzt überhaupt nicht. Gedanken? – TM3

+0

Sorry, ignoriere den letzten Satz dort. Auf diesen Seiten gibt es kein Akkordeon (mein Schlechter), aber ich benutze die gleichen Klassen, um sie zu stylen, und sie verlinken nicht auf ihre äußeren Seiten. Ich denke, ich könnte versuchen, die Klassen zu ändern, obwohl – TM3

0

Ich denke, was passiert ist, dass das Click-Ereignis auf dem Ankerelement wird nicht gestoppt wird und wegen dem die Seite versucht, zum id des als href übergebenen Elements zu navigieren, und daher scrollt es nach oben.

So sollten Sie versuchen, das Klickereignis von bubbling up zu stoppen.

So können Sie entweder e.preventDefault(); oder return false;

Wie in dieser DEMO gezeigt verwenden.

+0

Hallo Mohd, ich benutze jetzt die Funktion unter Ihrem Kommentar hier von Samir, und er hat e.preventDefault() enthalten; Das scheint nicht den Effekt zu haben, den du beschreibst. Return False scheint alles daran zu hindern, überhaupt zu passieren. (Das div öffnet nicht) Irgendwelche Ideen? – TM3

+0

Dann 'return false' am Ende der Funktion, nachdem Sie Ihre Logik abgeschlossen haben. –

+0

hmm ok, das funktioniert nicht für mich. Vielleicht füge ich es nicht an der richtigen Stelle hinzu? – TM3