Mietin mistähän johtuu yksi pikku ongelma.
Functiossa on nämä rivit, jotka toimii ekalla kerralla.
document.getElementById(eka).style.backgroundColor="silver"; document.getElementById(toka).style.backgroundColor="silver";
Kyseessä on taulukon rivin solut (josta hiukan aiemmin kirjoitin).
Nuo taustavärit tulevat, kun rivi merkitään poistettavaksi. Kun poistaminen peruutaan, tausta muuttuu valkoiseksi. Mutta jos sen jälkeen päättää sittenkin valita uudestaan tuon saman rivin poistettavaksi, niin tausta ei enää vaihdukaan harmaaksi. Miten tuon onnistuisi korjaamaan?
Miten muutat taustan takaisin valkoiseksi?
lainaus:
http://catb.org/~esr/faqs/smart-questions.html
The most effective way to be precise about a code problem is to provide a minimal bug-demonstrating test case. What's a minimal test case? It's an illustration of the problem; just enough code to exhibit the undesirable behavior and no more.
pistemies kirjoitti:
Mietin mistähän johtuu yksi pikku ongelma.
Functiossa on nämä rivit, jotka toimii ekalla kerralla.document.getElementById(eka).style.backgroundColor="silver"; document.getElementById(toka).style.backgroundColor="silver";
Sillä välin kun odottelemme, että lähetät ongelman kunnollisen kuvauksen (ks. jlairen kommenttia), voisi vaikkapa pitää pienen esitelmän.
Ohjelmoinnin kymmeneen käskyyn kuuluu, tai ainakin pitäisi kuulua, seuraava:
Älä käytä samaa literaalia kahdesti samassa merkityksessä.
Jos siis on tarkoitus muuttaa kahden solun taustaväri tietyksi samaksi väriksi, älä kirjoita kaksi kertaa "silver". Kirjoita "silver" (tai numerokoodi - värien nimet eivät ole ollenkaan niin hyödyllisiä kuin luullaan) yhteen kertaan ja käytä tätä arvoa sitten siellä missä tarvitaan. Sen voi sijoittaa muuttujaan tai olion ominaisuudeksi, välittää parametrina tms. Kunhan et kopioi literaalia.
Jo Hammurabin hallinnon tietojenkäsittelyosastolla havaittiin, että suuri osa virheistä johtui literaalien kopioinnista. Ennemmin tai myöhemmin nimittäin joku muuttaa vain yhden literaalin esiintymistä vaikka on tarkoitus muuttaa kaikki, tai joku muuttaa eri esiintymiä vahingossa eri tavalla.
Voi hitsi minun kanssa!
Tajusin virheen tuossa ennen aamua.
Kuten edellisessä viestiketjussani kävi ilmi, laitoin sinne chgDelrow-funktioon uudestaan kutsun delRow-funktioon, ja enkä tietenkään muistanut siihen kirjoittaa noita argumentteja "eka,toka". Taidan muuttaa sen siten kuin ajattelin, eli onDblClick, niin se voi olla kokoajan "näkösällä".
jlaire: tuossa cghDelrow funktioon lisäsin nuo samat rivit ja värikisi "white". En kokeillut, olisiko tominut jos väri olisi ollut pelkkää tyhjää "".
Mutta kuten tuosta ulkoasusta näkee, koko homma on vielä testausvaiheessa.
Tarkoitus on, että asetan funktion argumentiksi sarakkeiden määrän. Ja sitten silmukassa asetan tuon tauastavärin koko taulukon leveydelle.
Miten tuo silmukassa menisi?
Olisiko tämä suunnilleen toimiva:
soluid = arr[i]; document.getElementById(soluid).style.backgroundColor="silver";
En ole vielä testaillut mitään eilisillan jälkeen.
pistemies kirjoitti:
Olisiko tämä suunnilleen toimiva:
soluid = arr[i]; document.getElementById(soluid).style.backgroundColor="silver";En ole vielä testaillut mitään eilisillan jälkeen.
Nyt on testattu ja toimiihan se noin... kiitoksia kiinostuksesta vaikka js ei ole kielenä aina kaksinen.
Olipas taas hyödyllinen ketju. Kun tulevaisuudessa joku selaa vanhoja keskusteluja ja etsii ratkaisua ongelmaansa, tästä on varmasti paljon apua.
Saahan sitä kieltä syyttää, jos haluaa. Mutta todella harvoin tulee vastaan ongelmia, joissa on oikeasti kyse JavaScriptin rajoitteista. Yleensä kieltä käytetään huonosti tai ihan vaan väärin.
jlaire kirjoitti:
Yleensä kieltä käytetään huonosti tai ihan vaan väärin.
Joo-o. Kun aina ei ole sitä kielipäätä.
Kyllä JS aina PHP:n voittaa.
Värien kirjoittaminen JS-koodin (tai HTML-koodin) sekaan on huono tapa, jos väri itsessään ei ole olennainen vaan sillä vain merkitään jotain toista asiaa (kuten tässä tapauksessa rivin poistamista). Ilmeisesti myös muutat koko rivin väriä, jolloin soluilla ei pitäisi olla asian kanssa mitään tekemistä, vaan muutos pitäisi tehdä tr-elementtiin. Järkevintä olisi siis muuttaa vain rivin luokkaa (tr.className) ja hoitaa ne väriasiat CSS-koodilla.
Aihe on jo aika vanha, joten et voi enää vastata siihen.