17. oktober 2005 - 02:15Der er
17 kommentarer og 1 løsning
Skift farve på celler
Jeg har en tabel med en række celler med farven #FFCC00. Hver celle har et unikt ID. Når jeg klikker på en celle skal bgfarven skifte til #CC99FF på kun den celle. Klikker jeg på en anden celle skal den forrige skifte til oprindelig farve #FFCC00 og den ny have farven #CC99FF
Altså: den celle der klikkes på skal fremhæves.
Tabellen er dynamisk ved load og hentes fra en MySql DB med PHP. Den består altid af 4 kolonner. Hvis det er muligt må alle 4 celler i samme række gerne skifte. I den forbindelse skal brug af Class helst undgåes da jeg måske skal bruge dette til noget andet!
Spm: Skal det forståes således at man godt kan bruge flere class navne på samme element, blot adskilt med mellemrum i defitionen?
Kan det undgåes at farven ikke skifter til standardfarven hvis TD'en allerede er markeret? Jeg skal bruge det til et internt mailsystem og den markerede TD for den aktuelle mail skulle gerne forblive markeret selvom man klikker flere gange!
Kommentar: jeg har lige siddet og studeret lidt om css. For at en css definition skal skrives rigtig skal..
color:red;} <!-- skrives således --> color: red;}
og... .minTabel{border-collapse:collapse;} <!-- skrives således --> .minTabel{border-collapse: collapse;}
w3c's css validator skulle melde fejl hvis der ikke laves mellemrum (har ikke prøvet det!)
Jeg har prøvet at skifte fontweight på alverdens måder, men intet har effekt.
For at undgå skiftning tilbage til std farver ville jeg mene at if(oldElm) ... skulle skiftes til noget lign. if(oldElm <> elm) ... eller if(oldElm != elm)
... men intet virker! Mit kenskab til scripts kan ligge på et meget lille sted.
Listen af mails bliver hentet fra MySql. De mails der er blevet læst vises i maillisten med font-Weight = 'normal'. Ulæste vises med 'bold'. Dette sættes via PHP med eksempelvis: <h4 style="font-weight: <?php if ( $row[$mitnavn] == "Læst" ) { echo "normal;"; } else { echo "bold;";}?>">
Der er i alt 4 kolonner: Fra, Til, Dato, og Emne. Ovenstående er koden for "Til". Alle cellebaggrunde er som standard hvide. Klikkes der på en mail, hvadenten det er i kolonnen Fra, Til, Dato, eller Emne sakl der ske 4 ting:
1. Der skrives en værdi i MySql at mailen er læst. Det har jeg lavet
2. I et textarea skrives indholdet af mailen. I et Input Type text skrives emnet. Det er lavet
3. Bg-farven på rækken på mailen skal skifte til eksempelvis grå for at vise at det er den mail man har klikket på. Det har du delvis hjulpet med i ovenstående kode. Her er problemet at hvis du klikker 2 gange på samme række, altså inden for samme tr, skifter farven tilbage igen, hvilket jo ikke duer da man så ikke kan se hvilken mail der er markeret!
4. Indtil i dag havde jeg bare lavet det sådan at man skulle klikke på emnet for at få vist mailen. Visuelt skiftede jeg så bare fonten med: <h4 onclick="this.style.fontWeight='normal';">. Men da du med din kode har lavet det så smart at baggrundsfarven skifter ved klik i tr i stedet for en enkelt td, skal jeg også have skiftet bold til normal i hele rækken, altså alle 4 celler i en række.
1. Hvis skrivningen til databasen skal foregå, skal der jo laves en kontakt til serveren, den kan jo kun klares ved at submitte (eller en eller anden http-request !-)
3 + 4. Så skal vi jo bare fjerne tilbage-tingen, som jeg troede var nødvendig og tilføje normal font-weight:
Jeg har nu løst det med skift af fonten på hele td'en, så nu gælder det baggrundsfarven!
skrivlaesttildb() er en funktion som loader en 1*1 pix fra et php script og dette script skriver til DB, så jeg laver ingen submit! Der sker ingen reload af siden.
Min function ser nu således ud:
var oldElm = null; function mClick(elm){ var state = elm.style.backgroundColor == ""; if(oldElm) oldElm.style.backgroundColor = ""; elm.style.backgroundColor = state ? "#EBEBEB" : ""; oldElm = elm; }
Det der sker her er at man skifter baggrundsfarven UANSET HVAD! og det skal den IKKE! Den skal kun skifte hvis den ikke allerede er skiftet. Altså noget lignende dette:
var oldElm = null; function mClick(elm){ var state = elm.style.backgroundColor == ""; if(oldElm AND oldElm<>elm) oldElm.style.backgroundColor = ""; elm.style.backgroundColor = state ? "#EBEBEB" : ""; oldElm = elm; } Men jeg KAN SIMPELTHEN ikke finde ud af hvordan syntaxen i JavaScript fungerer. Jeg har nok brugt 5-6 timer på at finde ud af hvordan jeg skriver 2 betingelser i en if-sætning, men jeg får fejl uanset hvad!
if(oldElm AND oldElm<>elm)
if(oldElm && oldElm!=elm)
if(oldElm) { if (oldElm<>elm) "kode" }}
Jeg har prøvet alverdens muligheder efter at have studeret en masse koder. Det eneste jeg ikke har fundet er en JavaScript Resource side hvor man kan læse lidt om JavaScript programmering. En side som er hvad php.net er for PHP.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.