walter: die jeweils angeklickte Tab.zelle einfärben (und nur diese!)

Guten Abend allerseits!

Ich hab hier eine Mysql-Datenbank auf lokalem Server, in der ich unsere Gigs+Veranstalter verwalte.
Frameset: linkes Fenster zur Anzeige einer "Karteikarte", rechtes Fenster für "Suche"+"Ergebnisliste"(->Tabelle; die Treffer sind Links, die beim Anklicken die jeweilige "Karteikarte im linken Fenster aufrufen).
Um beim Abarbeiten der "Ergebnisliste" den Überblick nicht zu verlieren, möchte ich den jeweils angeklickten Link farbig hervorheben.
Soweit, sogut.
Das Problem: ich hab von Javascript so gut wie keine Ahnung.

Ich bin soweit vorgedrungen, einen Link ( sprich eine Tab.zelle) einzufärben :
...
$cnt=1;
while( $datensatz = mysql_fetch_array( $ergebnis ) )
     {
     ...
     print "<td id="Zelle$cnt" ";
     $x=id;
     print "onClick=Einfaerben($x)><a href="...>...</a></td>\n";
     ...
     $cnt=$cnt+1;
}
...
...
?>
<script type="text/javascript">
<!--
function Einfaerben(x) {
   document.getElementById(x).style.background='red';
-->
</script>
...
Das Ganze färbt aber logischerweise bei jedem Klick eine Zelle ein, d.h. bei 5 Klicks hab ich 5 eingefärbte Zellen.
Es soll aber nur die "jeweils angeklickte Zelle" eingefärbt werden!
Ich hab dann damit rumprobiert, die aktuell eingefärbte Zelle in eine Variable zu schreiben, um sie beim nächsten Klick als "zuletzt_gefaerbte_Zelle" wieder mit der Hintergrundfarbe zu  übertünchen.
...
<script type="text/javascript">
<!--
function Einfaerben(x) {
  var old_x;
  document.getElementById(x).style.background='red';
  if (old_x != "") {
    document.getElementById(old_x).style.background='grey' ;
  }
  old_x=x;
}
-->
</script>
Es funktioniert nicht ... irgendwas ist "grausam" falsch ...
Langer Rede kurzer Sinn : Ich finde keine Lösung!

Kann mir jmd. weiterhelfen?
Gruß vom Walter

  1. Hallo Walter,

    onClick=Einfaerben($x)><a href="...>...</a></td>\n";

    erstmal waere hier onclick="Einfaerben(this)" am einfachsten

    Ausserhalb der Funktion legst Du die Variable old_x an
    var old_x;

    In der Funktion ist 'this' dann eine Referenz auf die Zelle
    function Einfaerben(sender)
    {
      if(old_x)// beim ersten Durchlauf ist old_x ja leer
      {
        old_x.style.backgroundColor = 'silver'; // faerb die _alte_ Zelle silver (war es silver? egal)
      }
      sender.style.backgroundColor = 'red';  // faerb die Zelle rot
      old_x = sender                         // weise old_x den neuen Wert zu
    }

    Gruß,

    Dieter

  2. Hi,

    Langer Rede kurzer Sinn : Ich finde keine Lösung!

    Alternativ zu Dieters Vorschlag:

    Wenn Du Coding: Darstellungswechsel - Un-/Sichtbare Elemente: Ein-/Ausklappen, Verstecken, Transparenz, Farbe einbindest, jede Tabellenzelle mit einer ID versiehst der Art id="celln" wobei n eine fortlaufende Nr. ist, dann färbt

    <td id="cell1" onClick="toggle('back:grey/red','td:id','cell','1',true);">

    alle "celln"-Zellen grau ein, bis auf die Zelle "cell1". Die wird rot.

    Gruß, Cybaer

    --
    Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
    1. Hi,

      back:grey/red

      Grmpf! "grey" gibt es natürlich nicht, muß "gray" heißen (oder ein andere gültiger CSS-Farbwert).

      Gruß, Cybaer

      --
      Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
      1. Hallo Cybaer,

        Grmpf! "grey" gibt es natürlich nicht, muß "gray" heißen (oder ein andere gültiger CSS-Farbwert).

        Einem Briten wäre das bestimmt auch passiert http://dict.leo.org/?search=grau&searchLoc=0&relink=on&spellToler=standard&sectHdr=on&tableBorder=1&cmpType=relaxed&lang=en

        Gruß,

        Dieter

        1. Hi,

          Einem Briten wäre das bestimmt auch passiert

          :) Schon klar, aber a) nutze ich normalerweise keine Farbnamen, b) habe ich das nur vom OP übernommen, c) ist es logisch (heißt ja auch "color" und nicht "colour") und d) ist mir das schonmal passiert (und wer macht schon gerne denselben Fehler zweimal?). ;-)

          Gruß, Cybaer

          --
          Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
    2. Hallo Cybaer !

      Alternativ zu Dieters Vorschlag:

      Wenn Du Coding: Darstellungswechsel - Un-/Sichtbare Elemente: Ein-/Ausklappen, Verstecken, Transparenz, Farbe einbindest, jede Tabellenzelle mit einer ID versiehst der Art id="celln" wobei n eine fortlaufende Nr. ist, dann färbt...

      Du bringst ja Sachen an ;) ... never heard of "toggle()" ... aber das sagt bei mir nicht viel ;)
      Da muß ich mich erst reinvertiefen, will sagen : Dieters Vorschlag leuchtet mir unmittelbar ein, deine Alternative klingt für mich Neuling erstmal sehr fremd und braucht "Lese- und Nachvollziehensarbeit" .. ein willkommener Anlaß eine neue Sache zu lernen.
      Danke vom Walter

      1. Hi,

        Du bringst ja Sachen an ;)

        Meine DHTML-"Allzweckwaffe" für dynamische Tabellen jedweder Art. ;-)

        Da muß ich mich erst reinvertiefen, will sagen : Dieters Vorschlag leuchtet mir unmittelbar ein,

        Selbstredend! Auch wenn globale Variablen eigentlich "pfui" sind - aber das dürfte dich ja kaum interessieren (BTW: mich stört es ggf. auch nicht >;->).

        deine Alternative klingt für mich Neuling erstmal sehr fremd

        Klar: "Kanonen auf Spatzen" ;-) Ist hier nur insofern einfacher, weil man sich keinerlei Status merken muß.

        und braucht "Lese- und Nachvollziehensarbeit" .. ein willkommener Anlaß eine neue Sache zu lernen.

        Also wenn ich die Routine nicht bereits hätte, würde ich sie glatt programmieren ... ;)

        Gruß, Cybaer

        --
        Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!