You are not logged in.

  • Login

1

Thursday, September 20th 2007, 3:54pm

toggle-funktion, javascript

Hi,

ich habe nun die Thematik aus diesem Thread mit JavaScript bearbeitet. Ich habe also eine toggle-Funktion und den jeweiligen Elementen eine id zugewiesen.
Jetzt hab ich zwei Probleme:
1. Ich habe bei allen (per CSS) display:none gesetzt, sodass die unteren Ebenen am Anfang nicht sichtbar sind. Nun muss ich aber 2mal auf die erste Menüebene klicken, damit die toggle-Funktion ausgelöst wird. Kann mir jemand erklären warum das so ist?

2. Ich würde die unteren Ebenen gerne einrücken, was normalerweise bei der Verschachtelung von Listen auch funktioniert. Allerdings geht das nicht mit der JS-Funktion. Auch hier wäre ich für eine Lösung dankbar.

hier die relevanten Code-Stellen (auszugsweise)

JavaScript Code

1
2
3
4
5
6
7
8
function toggle(obj) {
	var el = document.getElementById(obj);
		if ( el.style.display != 'none' ) {
				el.style.display = 'none';
		} else {
				el.style.display = 'inline';
		}
}


HTML Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<div id="menu">
	<ul>
    			<li><A HREF="kontakt.html" TARGET="inhalt">Startseite</A></li>
    			<li><A HREF="person.html" TARGET="inhalt">Zur Person</A></li>
  		</ul>
  		<ul>
			  		<li><A HREF="#" onclick="toggle('lehre');">Lehre</A></li>
    			<ul id="lehre">
      				<li><a href="lehre.html#vorst_lehre" target="inhalt">Vorstellungen zur Lehre</a></li>
      				<li><a href="lehre.html#vorst_lehre" target="inhalt">Lehrveranstaltungen im Wintersemester 2007</a></li>
			<li><a href="lehre.html#hinw_ws" target="inhalt">Hinweise f&uuml;r das Wintersemester 2007/2008</a></li>
      				<li><a href="lehre.html#vorst_lehre" target="inhalt">Bisherige Lehrveranstaltungen</a></li>
      				<li><a href="schriftliche_arbeiten.pdf" target="_blank">Verfassung von schriftlichen Arbeiten (Download)</a></li>
    			</ul>
  		</ul>
  		<ul>
    			<li><a href="#" onclick="toggle('praktika');">Betreuung von Praktika und Abschlussarbeiten</a></li>
    			<ul id="praktika">
      				<li><a href="praktika.html">laufende und abgeschlossene Abschlussarbeiten u.a. zu folgenden Themen</a></li>
      				<li><a href="praktika.html">Vermittlung von Praktika im Bereich Controlling</a></li>
    			</ul>
  		</ul>
  		<ul>
    			<li><a href="aufgaben.html" target="inhalt">Aufgaben im Studienbetrieb / weitere Funktionen und Mitgliedschaften</a></li>
  		</ul>
  		<ul>
    			<li><a href="#" onclick="toggle('akademisch');">Akademische T&auml;tigkeiten</a></li>
    			<ul id="akademisch">
      				<li><a href="akademisch.html#" target="inhalt">Forschungsinteressen und Forschungsprojekte</a></li>
      				<li><a href="akademisch.html#" target="inhalt">Forschungsf&ouml;rderung</a></li>
      				<li><a href="akademisch.html#" target="inhalt">Ausgew&auml;hlte Ver&ouml;ffentlichungen und Vortr&auml;ge</a></li>
      				<li><a href="akademisch.html#" target="inhalt">Mitgliedschaften/Arbeitskreise</a></li>
    			</ul>
  		</ul>
	</div>


Cascading Style Sheets

1
2
3
4
5
6
7
#menu ul, li{
	list-style-type:none;
}
 
#menu #lehre, #praktika, #akademisch {
  	display:none;
}

2

Thursday, September 20th 2007, 5:04pm

Wenn du den stil display:none im <head> definierst und nicht direkt ins DOM Objekt schreibst, dann weiß JavaScript davon nichts und es ist im Zweifelsfall "undefined".
Kannst ja einfach mal einen alert einbauen: alert(el.style.display). Mehr Sinn macht eine andere Bedingung: el.style.display == 'inline'
Bzw.. das wären wir bei deinem 2ten Problem: ul ist ein Blockelement. Also display:block

Ansonsten kannst du all das, was mit CSS möglich ist: Siehe http://de.selfhtml.org/javascript/objekt…e_eigenschaften

3

Thursday, September 20th 2007, 7:09pm

Danke, habe nicht daran gedacht, dass es ein Block-Element ist.

Lag also nur an der JS-Funktion. Hier die richtige Lösung:

JavaScript Code

1
2
3
4
5
6
7
8
function toggle(obj) {
	var el = document.getElementById(obj);
	if ( el.style.display != 'block' ) {
		el.style.display = 'block';
	}	else {
		el.style.display = 'none';
	}
}


Danke noch einmal!

Similar threads

Social bookmarks