die jeweils angeklickte Tab.zelle einfärben (und nur diese!)
walter
- javascript
1 Dieter Raber0 Cybaer0 Cybaer0 Dieter Raber0 Cybaer
0 walter0 Cybaer
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
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
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
Hi,
back:grey/red
Grmpf! "grey" gibt es natürlich nicht, muß "gray" heißen (oder ein andere gültiger CSS-Farbwert).
Gruß, Cybaer
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§Hdr=on&tableBorder=1&cmpType=relaxed&lang=en
Gruß,
Dieter
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
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
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