2012-04-13 18 views
0

Ich habe eine funktionierende Toggle-Funktion, die erweitert und minimiert wird, aber meine Liste ist beim Erweitern sehr lang und ich wollte einen "Schließen" -Link am unteren Rand einfügen, damit meine Benutzer nicht nach oben scrollen müssen, um zu klicken und Zusammenbruch. Irgendwelche Ideen, wie ich diesen Code ändern kann, um seine Funktionalität für meine Zwecke zu erweitern?Wie kann ich zum Zusammenklappen wechseln?

<script language="javascript"> 
$(function(){ 
$(".formname").toggle(function(){ 
var id=$(this).attr('id'); 
$("#form"+id).fadeIn('slow'); 
},function(){ 
var id=$(this).attr('id'); 
$("#form"+id).fadeOut('slow'); 
}); 
}); 
</script> 

mein html wie folgt aussieht:

<ul> 
<li><a href="#" id="formxyz" class="formname">My Expanding/Collapsing Data</a></li> 
<div style="display:none;"> 
<ul> 
<li>Content</li> 
</ul> 
</div> 
</ul> 

wenn ich den gleichen Link li am Boden vor dem Schließen ul Benutzer einfügen hat es zweimal klicken zusammenzubrechen. Ich würde eine Einzelklicklösung bevorzugen.

<ul> 
<li><a href="#" id="formxyz" class="formname">My Expanding/Collapsing Data</a></li> 
<div style="display:none;"> 
<ul> 
<li>Content</li> 
<li><a href="#" id="formxyz" class="formname">Close</a></li> 
</ul> 
</div> 
</ul> 
+0

IDs müssen immer eindeutig sein. – j08691

Antwort

1

Wenn Sie das Ereignis toggle() auf formxyz verwenden, bricht die neue Aktion zum Schließen die ursprüngliche Regel, daher müssen Sie manchmal zweimal auf formxyz klicken, um den Inhalt anzuzeigen.

Verwenden Sie also click() Ereignis mit fadeToggle() Aktion auf Formxyz. Es wird Inhalte anzeigen, während es sich versteckt.

Dann fügen Sie eine Klasse für alle "schließen", verwenden Sie parents Methode, um es Eltern div zu finden (es sollte der Inhalt Div sein), dann verstecken Sie es.

Die html:

<div style="background-color: gray"> 
    <li><a href="#" id="xyz" class="formname">My Expanding/Collapsing Data</a></li> 
    <div id="formxyz" class="content" style="display:none"> 
    <ul> 
     <li>Content</li> 
     <li><a href="#" class="closeform">Close</a></li> 
    </ul> 
    </div>​ 
</div> 

Die js-Datei:

$(function(){ 
    $(".formname").click(function(){ 
    var id=$(this).attr('id'); 
    $("#form"+id).fadeToggle('slow').focus(); 
    }); 

    $(".closeform").click(function(){ 
    $(this).parents("div.content").fadeOut('slow'); 
    }); 
}); 

OR Preiscode auf jsFiddle emulieren. Es ist ausführbar.

+0

und auch die 'Close'-Link-ID sollte nicht so wie 'Expanding'-Titel-ID sein. – taiansu

+0

Dies ist mehr im Einklang mit dem, was ich erreichen möchte, obwohl es alle divs auf meiner Seite schließt im Wesentlichen verlassen mich mit meiner bg Farbe und nichts anderes. Kann ein anderes Element als "Eltern" verwendet werden? Jedes Mal, wenn auf einen Link zum Erweitern geklickt wird, wird der Benutzer an den Anfang der Seite geführt. – sloga

+0

so weit, das macht den Trick $ (this) .closest ("div"). FadeOut ('langsam'); aber immer noch gehofft zu Seite von springen an die Spitze zu halten – sloga

1
<li><a href="#" id="xyz" class="formname">My Expanding/Collapsing Data</a></li> 
<div style="display:none;"> 
<ul> 
<li>Content</li> 
<li><a href="#" id="xyz2" class="formname">Close</a></li> 
</ul> 
</div> 

Eine ID soll für ein einzelnes Element verwendet werden. Verwenden Sie niemals dieselbe ID für mehr Elemente.

+0

Danke für Ihren Vorschlag. Die ID ist die gleiche, also schließt sie das korrekte div. Wenn die ID geändert werden muss, müsste ich meiner js eine zusätzliche Funktion hinzufügen, um sie zu veranlassen, das bestimmte div zu schließen. Ich bin mir nicht sicher, wie ich diese neue Funktion programmieren soll. – sloga

+0

Nein, Ihre Funktion basiert auf der Formname-Klasse. Ihre Anker in Ihren li-Tags haben diese Klasse. –

+0

Wenn Sie denken, dass ich falsch liege, bitte zeigen Sie mir, wo Sie explizit die XYZ-ID in Ihrem Javascript-Code verwenden. –

Verwandte Themen