TippSpielGott: Toggle - menüpunkte einzeln aus- und wieder einklappen

Also, folgendes ist mein Problem:
Ich möchte einen Terminplan erstellen, bei dem nähere Informationen zu den Terminen per Mausklick ausgeklappt werden sollen - bei Interesse. Funktioniert einzeln gesehen auch so ganz gut, nur nicht, wenn es mehrere Termine sind. Die Termine werden in einer Mysql-Datenbank gesammelt und mit PHP ausgelesen. Jedem Termin ist eine ID zugewiesen. Wie ist es nun möglich, dass auch jeder zu "toggelnden" Tabelle die zugehörige ID zugewiesen wird - oder wo liegt der Fehler? Hier der Quelltext:

<script type="text/javascript">

function toggle( targetId ){
  if (document.getElementById){
    target = document.getElementById( targetId );
     if (target.style.display == "none"){
      target.style.display = "";
     } else {
      target.style.display = "none";
     }
   }
}
</script>

<?
include "dbconnect.php";
  $abfrage = "SELECT id,beginn,ende,zeit,event,information,importance FROM termine ORDER BY beginn";
  $termine = mysql_query($abfrage);
  list($id,$beginn,$ende,$zeit,$event,$information,$importance) = mysql_fetch_row($termine);
  $beginn = explode("-", $beginn);
  $ende = explode("-", $ende);
  $zeit = explode(":", $zeit);
  if ($information=="") ($information="Keine weiteren Informationen hinterlegt.");
  if ($ende[2]!="00") ($ende="- $ende[2].$ende[1]."); ELSE ($ende="");
  echo "<table width='100%'><tr><td width='40'>$beginn[2].$beginn[1].</td><td width='50'>$ende</td><td>$event</td><td align='right'>"; ?>
<script> var toggleId = "<?php echo $id; ?>"; </script>
<div onclick="toggle(toggleId);return false;">+</div></td></tr></table>
<? echo "<table id='$id' style='display: none;'><tr><td width='80'>$zeit[0]:$zeit[1] Uhr</td><td width='10'></td><td>$information</td></tr></table>";
  while (list($id,$beginn,$ende,$zeit,$event,$information,$importance) = mysql_fetch_row($termine)) {
  $beginn = explode("-", $beginn);
  $ende = explode("-", $ende);
  $zeit = explode(":", $zeit);
  if ($information=="") ($information="Keine weiteren Informationen hinterlegt.");
  if ($ende[2]!="00") ($ende="- $ende[2].$ende[1]."); ELSE ($ende="");
  echo "<table width='100%'><tr><td width='40'>$beginn[2].$beginn[1].</td><td width='50'>$ende</td><td>$event</td><td align='right'>"; ?>
<script> var toggleId = "<?php echo $id; ?>"; </script>
<div onclick="toggle(toggleId);return false;">+</div></td></tr></table>
<? echo "<table id='$id' style='display: none;'><tr><td width='80'>$zeit[0]:$zeit[1] Uhr</td><td width='10'></td><td>$information</td></tr></table>"; }
?>

  1. hi,

    Wie ist es nun möglich, dass auch jeder zu "toggelnden" Tabelle die zugehörige ID zugewiesen wird - oder wo liegt der Fehler?

    was willst du denn jetzt eigentlich wissen?
    wie es möglich ist? na ja, ausgabe per echo o.ä. eben ...
    wo der fehler ist? _welcher_ fehler?

    $abfrage = "SELECT id,beginn,ende,zeit,event,information,importance FROM termine ORDER BY beginn";

    diese id ist doch sicherlich nummerisch? dann kannst du sie natürlich nicht als id in html verwenden, weil ids dort nicht mit einer ziffer beginnen dürfen.

    <script> var toggleId = "<?php echo $id; ?>"; </script>

    was soll das bewirken? wenn du diese zeile mehrfach ausgibst, überschreibst du den wert ja immer wieder.
    wirf sie raus, du brauchst sie nicht.

    <div onclick="toggle(toggleId);return false;">+</div></td></tr></table>
    <? echo "<table id='$id' style='display: none;'><tr><td

    so, hier hast du zwei stellen, wo die id einzusetzen wäre.
    machen wir erst mal eine in html gültige id aus deiner (vermutlich nummerischen), in dem wir ein präfix davorsetzen:

    $toggle_id = "toggle".$id;

    und dann setzen wir die noch ein:

    echo '<div onclick="toggle(''.$toogle_id.'');return false;"> ...';
    echo '<table id="'.$toggle_id.'" style="display:none;"><tr><td ...';

    dabei achtest du natürlich darauf, dass die id im aufruf der toggle()-funktion auch in anführungszeichen steht, denn es soll ja ein string übergeben werden.

    gruß,
    wahsaga

    --
    "Look, that's why there's rules, understand? So that you _think_ before you break 'em."