# Dynamische Klapp-FUnktion



## M-GT (23. August 2005)

Hi Leute
Also 
ICh würde gerne so eine Klappfunktion wie sie hier im Forum auf der Hauptseite ist (Rechts kann man alle Sachen einklappe lassen)

Jo es soll im Prinzip so sein 
1.Tabelle ganz oben... in der tabelle ist eine kleine Bildchen, wenn man auf das klickt öffnen sich unter der 1. tabelle weitere tabelle... (sowviele wie ich halt will)

WIe geht das? Brauch ich dazu Javascript? oder ist das irgendwie mit php zu bewerkstelligen?


----------



## shockshell (23. August 2005)

Ich weiß zwar nicht genau, welche Funktion Du auf der Startseite meinst, aber die von Dir beschriebene Funktion geht nur mit JavaScript. PHP ist eine Serverseitige Sprache und kann auf Klicks des Users im Browser nicht reagieren.


----------



## M-GT (23. August 2005)

gut dann @ admin bitte um Verschiebung ins richtige forum =)


----------



## AndreG (23. August 2005)

Das was du suchst is sowas wie hier denke ich.

http://www.computerhilfen.de/hilfen-8-79374-0.html

Mfg Andre


----------



## M-GT (23. August 2005)

Thx Du Bist Meine Rettung =)


----------



## M-GT (23. August 2005)

EHm ja du warst zwar wikrlich eine große hilfe aber wieso geht der Kack nu im IE
Hier mal jez der code:


```
<script language="JavaScript1.2">
var head="display:''"
function doit(header){
var head=header.style
if (head.display=="none")
head.display=""
else
head.display="none"
}
</script>
<table border="1">
<tr><td>
<div style="cursor: hand;" onclick="doit(document.all[this.sourceIndex+1])">   
   LINKÜBERSCHRIFT
   </div>
</td></tr>
</table>
<span style="display:none">
<span><table border="1">
<tr><td>
<a href="">Unterlink1</a>
<a href="">Unterlink2</a>
<a href="">Unterlink3</a>
<a href="">Unterlink4</a>
<br>

</td></tr></table></span></span></div>
```


Wieso tut mir diese Kack Code das an und geht nur im IE


----------



## Sven Mintel (23. August 2005)

Weil der K***-Coder die Links nach Microsoft-Methode anspricht, und nicht nach DOM-Methode(welche im Gegensatz zur MS-Methode ausser IE und Opera auch alle anderen aktuellen Browser interpretieren).

Schau dir bei den Javascript-Tutorials das Basic-DHTML-Menu an, dann wirst du schlauer.


----------



## shockshell (23. August 2005)

Weil der Code Document.all verwendet, was nicht standardkonfor ist und nur der IE versteht.
Probiers mal hiermit:

```
<script language="JavaScript1.2">
var head="display:''"
function doit(item){
header=document.getElementById(item);
var head=header.style
if (head.display=="none")
head.display=""
else
head.display="none"
}
</script>

<div style="cursor: hand;" onclick="doit('content')">
   LINKÜBERSCHRIFT
   </div>

<span style="display:none" id="content">

<span style="margin-left:5px"><a href="">Unterlink1</a></span><br>
<span style="margin-left:5px"><a href="">Unterlink2</a></span><br>
<span style="margin-left:5px"><a href="">Unterlink3</a></span><br>
<span style="margin-left:5px"><a href="">Unterlink4</a></span><br/>
</span></div>
```


----------



## M-GT (23. August 2005)

1000 Danke @ shockshell


----------



## M-GT (23. August 2005)

Jo leider muss ich im Nachhinein feststellen das da irgendwie ein Problem noch immer ist und zwar:

Wenn ich mehrere:
	
	
	



```
<div style="cursor: hand;" onclick="doit('content')">
   LINKÜBERSCHRIFT
   </div>

<span style="display:none" id="content">

<span><a href="">Unterlink1</a></span><br>
<span><a href="">Unterlink2</a></span><br>
<span><a href="">Unterlink3</a></span><br>
<span><a href="">Unterlink4</a></span><br/>
</span></div>
```
untereinander EInfüge passiert folgendes...:

Egal auf welche "LINKÜBERSCHRIFT" ich klicke es wird immer nur der unterteil vom 1. LINKÜBERSCHRIFT geöffnet, das selbe beim Schliesen egal wo ich drauf klicke der Effekt passiert nur immer beim 1.


Ich hab da jez schon ein bisschen auspropier und gemerkt eben wenn ich statt content 
1 fürs ERSTE
2 fürs ZWEITE
3 für... USW

Dann wird es richtig ausgeführt...

Mein Problem ist nun ich könnte natürlich jeden eine Zahl geben aber da ich das ganze mit php verwenden und wenn eine neuer eintrag in der Datenbank ist einen neue "LINKÜBERSCHRIFT + INHALT" dazu kommt weiß ich nicht wie ich das machen soll?

Gibts da irgendeinen Möglichkeite das er irgenwie immer +1 nimmt oder irgendwie mit der id in der datenbank?

HELFT MIR... =)


EDIT:
MIT MEINER VORIGEN VERSION WAR DAS ÜBERIGENS NICHT... DA HAT ER IMMER DAS RICHTIGE GEÖFFNET AUCH WENN MEHRERE DA WAREN =(


----------



## shockshell (23. August 2005)

Wenn Du dein Menu aus der Datenbank ausließt, machst Du das ja sicherlich über eine Schleife? Was ist da einfacher als einen Zähler mitlaufen zu lassen wie folgt:

```
for($x=0,$menu='';$x<count($menueintraege);$x++){

$menu.='<div style="cursor: hand;" onclick="doit(\'content\''.$x.')">
   LINKÜBERSCHRIFT
   </div>

<span style="display:none" id="content'.$x.'">

<span><a href="">Unterlink1</a></span><br>
<span><a href="">Unterlink2</a></span><br>
<span><a href="">Unterlink3</a></span><br>
<span><a href="">Unterlink4</a></span><br/>
</span></div>';
}
echo $menu;
```
Hoffe es war das was Du gesucht hast.


----------



## M-GT (23. August 2005)

Ehm?
Irgendwie steh ich jez am Schlauch kannst mir mal kurz den ganzen Quelltext für das Teil posten?

Edit: Ich habs propiert aber irgendwie  das nicht richtig...


----------



## shockshell (23. August 2005)

Ungefähr so...


```
$menu='
<script language="JavaScript1.2">
var head="display:\'\'"
function doit(item){
header=document.getElementById(item);
var head=header.style
if (head.display=="none")
head.display=""
else
head.display="none"
}
</script>';

$menueintraege=mysql_query('select * from menueintrage');
for($x=0;$x<count($menueintraege);$x++){

$menu.='<div style="cursor: hand;" onclick="doit(\'content\''.$x.')">
   LINKÜBERSCHRIFT
   </div>

<span style="display:none" id="content'.$x.'">

<span><a href="">Unterlink1</a></span><br>
<span><a href="">Unterlink2</a></span><br>
<span><a href="">Unterlink3</a></span><br>
<span><a href="">Unterlink4</a></span><br/>
</span></div>';
}
echo $menu;
```


----------



## M-GT (23. August 2005)

Ehm, irgendwie ist das nicht so das wahre es funktioniert auch nicht so ganz richtig und so wie ich will aber gibt es nicht irgendeine lösung auf basis von document.all

die aber bei beiden browser ?

oder wie gesagt kann man nicht irgenwie die Id jedes menupunktes aus der Db holen und nach denen die Teile öffenen?

Aber das mit der SCHelife gefällt mir gar nicht...

Eben einfahc so wies hier im Forum gescheit (ich hoffe das geht hier nicht mit schleife)


----------



## shockshell (23. August 2005)

Wie willst Du sonst Sie daten aus der Datenbank auslesen. Oder soll das ein statisches Menu werden?


----------



## M-GT (23. August 2005)

Nein?

Aber das einzige was ich will ist das es wie die erst Fassung meines Scriptes funktioniert (da wo noch das document.all drinnen war) 
Es soll einfach so funktionieren dort gehts ja auch ohne db das jedes für sich öffnet...

das wäre so perfekt wäre da nicht der Kack Firefox...


----------



## shockshell (23. August 2005)

Das Menu wurde hier auch über eine PHP Schleife erzeugt:


```
onclick="return toggle_collapse('forumbit_50')">Intern
<tbody id="collapseobj_forumbit_50" style="">
...
...
onclick="return toggle_collapse('forumbit_44')">Bildbearbeitung, Grafik, 3D & Design 
<tbody id="collapseobj_forumbit_44" style="">
...
...
onclick="return toggle_collapse('forumbit_162')">Multimedia 
<tbody id="collapseobj_forumbit_162" style="">
...
...
onclick="return toggle_collapse('forumbit_45')">Webmaster 
<tbody id="collapseobj_forumbit_45" style="">
```

Es geht in der Scheife ja lediglich um das Durchnumerieren der einzelnen Einträge.


----------



## M-GT (23. August 2005)

ja aber wozu hast du dann vorhin beim script ein Select drinnen gehabt?


----------



## shockshell (23. August 2005)

Na um die Einträge aus der Datenbank zu lesen. Beispielhaft.


----------



## M-GT (23. August 2005)

hmm das hat mich verwirrt ne das lass das geb ich mir dann selber überall hin wo ich es brauche:

Einfach eine .php
wo Eine Überschrift ist, wenn ich auf die draufklicke kommt das was darunter im <span> steht

und eben egal wieviele ich dran hänge es soll immer das Richtige geöffnet und geschlossen werden!


----------



## shockshell (23. August 2005)

Also etwas in der Art:

```
echo '<script language="JavaScript1.2"> 
var head="display:\'\'" 
function doit(item){ 
header=document.getElementById(item); 
var head=header.style 
if (head.display=="none") 
head.display="" 
else 
head.display="none" 
} 
</script>'; 

$irgendeinezahl=20; 
for($x=0;$x<$irgendeinezahl;$x++){ 
echo '<div style="cursor: hand;" onclick="doit(\'content'.$x.'\')"> 
   LINKÜBERSCHRIFT'.$x.' 
   </div> 

<span style="display:none" id="content'.$x.'"> 

<span style="margin-left:5px"><a href="">Unterlink'.$x.'-1</a></span><br> 
<span style="margin-left:5px"><a href="">Unterlink'.$x.'-2</a></span><br> 
<span style="margin-left:5px"><a href="">Unterlink'.$x.'-3</a></span><br> 
<span style="margin-left:5px"><a href="">Unterlink'.$x.'-4</a></span><br/> 
</span></div>'; 

}
```


----------



## M-GT (23. August 2005)

ehm hmm...
nee =)

wie erklär ich dir das am besten, ehm hast du ICQ?


----------



## shockshell (23. August 2005)

Nicht hier...


----------



## M-GT (23. August 2005)

Wie soll ich das verstehen bzw wann hast dus wieder?


----------



## shockshell (23. August 2005)

Hab an diesem Rechner kein ICQ. Zuhause schon. Kenn aber die Nummer nicht auswendig.


----------



## M-GT (23. August 2005)

jo und wann bist du wieder daheim?

dann kannst du mich ja adden : 276761952


----------



## shockshell (23. August 2005)

Heute wohl zwischen 22 oder 23 Uhr .


----------



## M-GT (23. August 2005)

Hmm nagut andere Möglichkeit...
hast du jez zugang zu einem email konto?

Wenn ja gib mir bitte die addy, dann schick ich dir kurz das ganze script... und dann siehst du was ich meine


----------



## con-f-use (23. August 2005)

Du könntest das ganze script auch hier im Forum als Dateianhang posten....


----------



## M-GT (23. August 2005)

nee das will ich dann doch nicht =)...


----------



## shockshell (23. August 2005)

Hast ne pn bekommen


----------



## M-GT (23. August 2005)

Jo ich schikc es dir so schnell rüber wie ich kann ich muss jez nurnoch kurz was anderes erledigen


----------



## Sven Mintel (23. August 2005)

Da die Kommunikation hier offensichtlich privat vonstatten geht, schliesse ich das Thema... zum Chatten gibts bessere Möglichkeiten.

Apropos Chatten:
@M-GT: Lies dir bitte einmal die Netiquette, insbesondere #12 durch, und beherzige das dort Erwähnte in Zukunft. Danke.


----------

