2009-03-16 9 views
0

Hey, ich habe das folgende Dilemma: Ich habe eine Reihe von DIVs mit Kind DIVS in ihnen, die standardmäßig ausgeblendet sind. Am Anfang benutzte ich Javascript und Onclick mit Ankern, um sowohl einen Toggle- als auch einen 'Move-to-Anchor'-Effekt zu erzielen. Jetzt, wo ich zur JQuery-Alternative gewechselt bin, habe ich Probleme, den gleichen 'Move-to-Anchor'-Effekt zu reproduzieren. Das Umschalten funktioniert gut.Mischen von JQuery toggle() mit #anchors

Wenn Sie Link in der übergeordneten div ein „a h2“ klicken, wird das Kind div durch Knebel gezeigt. Hier ist ein Beispiel von einem Elternteil und Kind div Setup:

<div class="full email"> 
<a id="test_anchor"></a> 
    <h2 class="subsubtitle"><a href="#test_anchor">TITLE AND LINK</a></h2> 
    <div class="description full"> 
    <p>THIS IS WHAT SHOWS ALL THE TIME, REGARLDESS OF THE TOGGLE</p> 
    </div><!-- #description ends here --> 

    <div id="c_1"> 
    THE DIV AND THE CONTENTS THAT ARE SHOWN AND HIDDEN 
    </div><!-- #c_1 div ends here --> 

</div><!-- .full .email ends here --> 

// Und hier ist der JQuery:

$(document).ready(function(){ 

$("#c_1,#c_2,#c_3,#c_4").hide(); 

$("div div h2 a").toggle(
    function() { $(this).parent().siblings("div:last").slideDown("slow") }, 
    function() { $(this).parent().siblings("div:last").hide() } 

    ); 

}); 

Nun ist die Frage: Wie kann ich aktivieren oder dass #anchor reaktivieren, so dass sowohl die Jquery slideDown/hide Funktionen und der alte Goold 'Move-to-Anchor' kommt ins Spiel?

Mit freundlichen Grüßen G.Campos

Antwort

1

Was Sie mit der Toggle-Funktion tun wird die Sichtbarkeit der angepassten Elemente Makeln, nicht das, was in ihnen ist.

versuchen, etwas wie folgt aus:

$(function(){ 
    $("#c_1,#c_2,#c_3,#c_4").hide(); // good practice to hide in JS instead of CSS file :) 

    // Assign toggle functionality. 
    $("h2.subsubtitle a").click(function(){ 
    var jDiv = $(this).parent().siblings("div:last"); 

    if(jDiv.is(":visible")){ 
     jDiv.hide("slow"); // you're toggling this div, not the anchor. 
    } else { 
     jDiv.show("slow"); 
    } 

    return true; // if switched to false, anchor won't link to anything. 
    }); 
}); 
+0

Es gibt einen zusätzlichen Trick, mit dem Sie das Blinken von Elementen verhindern können, die in document.ready ausgeblendet sind. Werfen Sie einen Blick hier - http://www.learningjquery.com/2008/10/1-awesome-way-to-avoid-the-not-so-excellent-flash-of-amazing-unstyled-content –

+0

Das ist eine große Trick, danke fürs Teilen! :) – Seb

+0

Nun, das Problem ist jetzt, dass der obige Code den Anker funktioniert und den Toggle selbst hat - aber nur wenn man von HIDDEN zu SHOWN geht. Sobald es geöffnet ist, kann es nicht wieder geschlossen werden. Die neu in Jquery Ich bin nicht sicher, wie ich in der Haut() zu der Lösung bereitgestellt werfen würde, so dass Toggle voll funktioniert. –

0

Versuchten Sie something like this zu erreichen?

Relevante jQuery-Code

$(function(){ 

    $("#c_1").hide(); 

    $("h2.subsubtitle a").toggle(
    function() { $(this).parent().siblings("div:last").slideDown("slow"); return false;}, 
    function() { $(this).parent().siblings("div:last").slideUp("slow"); return false; }      
    ); 

}); 

EDIT:

Als Antwort auf deinen Kommentar, ich habe auf this example eine Anzahl der Ein-/Ausblenden Abschnitte setzen und alles scheint gut für mich zu arbeiten in IE6 und Firefox 3. Sie können den Code dafür bearbeiten, indem Sie /edit auf die URL hinzufügen. Funktioniert dieses Beispiel für Sie und welchen Browser benutzen Sie?

+0

Danke Russ. Ja, das von Ihnen angegebene URL-Beispiel hat den gewünschten Effekt. Der Ein-/Ausblenden-Schalter. Auf meiner Seite scheint es jedoch einen Fehler zu geben, da viele dieser Eltern-divs und ihr jeweiliges Kind div sind. Ich habe versucht, mit Ihrem Code: sobald das Kind div geöffnet wird, ist es nicht schließt. –