Katlana: Fieldset - Inhalt ein-/ausblenden

Hallo miteinander.

Ich habe folgendes Problem.
Ich möchte gerne mit Hilfe eines Scripts den Inhalt eines Fieldsets ein- und ausblenden lassen.
Kann mir jemand weiterhelfen und sagen, wo der Fehler ist, bzw. wie ich diesen beheben kann?

Viele Grüße
Katlana

<form name="Beschreibung">
<input  type="checkbox" id="chkBeschreibung" name="chkBeschreibung" style="display:none"
 />
</td>
<td>
<fieldset name="fldDetailsBeschreibung" style="width:300px">
<legend onclick="ZeigeDetailsBeschreibung();">Beschreibung</legend>

<div style="display:none">
<br>
Hier steht die detailierte Beschreibung.
<br><br>
</div>

</fieldset>
</form>
</td>

<script type="text/javascript">
function ZeigeDetailsBeschreibung()
{

set(document.forms["Beschreibung"].elements["chkBeschreibung"]= 'true';

if (document.forms["Beschreibung"].elements["chkBeschreibung"].checked){
document.forms["Beschreibung"].elements["fldDetailsBeschreibung"].div.style.display =
'block';
}else{
document.forms["Beschreibung"].elements["fldDetailsBeschreibung"].div.style.display =
'none';
}
}
</script>

  1. div ist kein Formularelement und kann daher nicht mit document.forms["Beschreibung"].elements["fldDetailsBeschreibung"].div erfasst werden.

    Gebe dem betreffenden div eine ID und verwende document.getElementById, damit ist Dein Problem gelöst.

    Gruß, LX

    --
    RFC 1925, Satz 6a: Es ist immer möglich, einen weiteren Umweg einzufügen.
    RFC 1925, Satz 11a: Siehe Regel 6a
  2. Mahlzeit Katlana,

    Kann mir jemand weiterhelfen und sagen, wo der Fehler ist, bzw. wie ich diesen beheben kann?

    Ja.

    <fieldset name="fldDetailsBeschreibung" style="width:300px">
    <legend onclick="ZeigeDetailsBeschreibung();">Beschreibung</legend>

    Generell würde ich Dir empfehlen, bei derartig "allgemeinen" Funktionen eine Referenz auf das aktuelle Element als Parameter mitzugeben. Warum? Siehe weiter unten ...

    function ZeigeDetailsBeschreibung()
    {

    set(document.forms["Beschreibung"].elements["chkBeschreibung"]= 'true';

    Hättest Du der Funktion eine Referenz auf das http://de.selfhtml.org/javascript/objekte/htmlelemente.htm#legend@title=legend-Element als Parameter mitgegeben (s.o.), könntest Du einfach über dessen http://de.selfhtml.org/javascript/objekte/elements.htm#form@title=form-Eigenschaft auf das umgebende Formular zugreifen und spartest Dir den ersten Teil der obigen Code-Zeile.

    Der Rest ist allerdings auch nicht viel richtiger - Du willst wirklich einem Elementobjekt den String 'true' zuweisen? Möchtest Du nicht viel lieber seine http://de.selfhtml.org/javascript/objekte/elements.htm#checked@title=checked-Eigenschaft auf true setzen?

    if (document.forms["Beschreibung"].elements["chkBeschreibung"].checked){

    Ah, Du kannst das ja doch. Aber wenn Du oben das Element explizit auf "angekreuzt" setzt, musst Du das hier doch nicht mehr abfragen???

    document.forms["Beschreibung"].elements["fldDetailsBeschreibung"].div.style.display =

    'block';

    Wie LX bereits schrieb, geht das so nicht. Ein Formularelement hat keine Eigenschaft namens "div". Du kannst allerdings unterhalb des entsprechenden Formularelements <http://de.selfhtml.org/javascript/objekte/document.htm#get_elements_by_tag_name@title=nach einem <div>-Element suchen> oder Dir <http://de.selfhtml.org/javascript/objekte/node.htm#child_nodes@title=alle seine Kindobjekte> ausgeben lassen.

    MfG,
    EKKi

    --
    sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
  3. Ergänzend zu den bisherigen Antworten

    set(document.forms["Beschreibung"].elements["chkBeschreibung"]= 'true';

    Was ist set?
    Und falls es das wirklich gibt und es hier auch Sinn macht, dann hast du hier eine Klammer aufgemacht, die du nicht mehr schließt.