Avatar billede nyp Nybegynder
04. januar 2004 - 23:36 Der er 9 kommentarer og
2 løsninger

Problem med object

Hej
Jeg opretter et objekt, "function nytBraet()", som indeholder 64 objekter, "function felt(bratObj,felt)", mit problem er så, lidt mystisk eller ganske enkelt?, at det sidste object kan jeg fint ændre egenskaber på, men ikke de andre dvs. hvis jeg laver en alert på den egenskab jeg har prøvet at ændre, så ser det tilsyneladende ud til at den er ændret, men den vises ikke på skærmen, hvad gør jeg galt?, hjælp!!!
Hele koden:

<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN' 'http://www.w3.org/TR/html4/loose.dtd'>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
        <title>PgnReader</title>
    </head>

    <script>
function udregnToppen(felt,bratObj)
{
    var res="";
    var y=Math.floor(felt/8);
    y=y * bratObj.storelse + bratObj.ramme;
    res=y+"px";
    return res;
}

function udregnVenstre(felt,bratObj)
{
    var res="";
    var x=felt-Math.floor(felt/8)*8;   
    x=x * bratObj.storelse + bratObj.ramme;
    res=""+x+"px";
    return res;
}

function udregnFarve(felt, feltObj, bratObj)
{
    var farve, r1, r2;
    r1=(felt-Math.floor(felt/8)*8+Math.floor(felt/8))/2;
    r2=Math.round(r1);
    if (r1==r2) farve=bratObj.hvid; else farve=bratObj.sort;
    feltObj.style.backgroundColor=farve;
}

function felt(bratObj,felt)
{
    this.bratObj=bratObj;
    this.feltNavn=bratObj.bratNavn + "felt" + felt;
    bratObj.bratElement.innerHTML=bratObj.bratElement.innerHTML+"<div id=\"" + this.feltNavn + "\"></div>";
    this.feltElement=document.getElementById(this.feltNavn);
    this.feltElement.style.position="absolute";
    this.tegnFelt=function(felt1)
    {
        this.feltElement.style.left=udregnVenstre(felt1,this.bratObj);
        this.feltElement.style.top=udregnToppen(felt1,this.bratObj);
        udregnFarve(felt1,this.feltElement,this.bratObj);
        this.feltElement.style.width=this.bratObj.storelse + "px";
        this.feltElement.style.height=this.bratObj.storelse + "px";
    }
    this.tegnFelt(felt);
}

function nytBraet(){
    this.feltObj=new Array(Object);
    this.sort=opstil.sort;
    this.hvid=opstil.hvid;
    this.storelse=opstil.storelse;
    this.ramme=opstil.ramme;
    this.bratNavn="brat" + opstil.bratNr;
    opstil.bratNr++;
    document.body.innerHTML=document.body.innerHTML+"<div id=\"" + this.bratNavn + "\"></div>";
    this.bratElement=document.getElementById(this.bratNavn);

    for (var i=0; i<=63; i++){
        this.feltObj[i]=new felt(this, i);
    }

    this.resize=function(){
            for (var i=0; i<=63; i++){
                this.feltObj[i].tegnFelt(i);
            }
    }
alert(this.feltObj[62].feltElement.style.backgroundColor);
    this.feltObj[62].feltElement.style.backgroundColor="blue";
alert(this.feltObj[62].feltElement.style.backgroundColor);
    this.feltObj[63].feltElement.style.backgroundColor="red";
}

function variabler()
{
    this.bratNr=1;
    this.billedPlacering="brikker1/";
    this.storelse=50;
    this.ramme=Math.round(this.storelse/2);
    this.sort="#222222";
    this.hvid="#DDDDDD";
}

function start()
{
    opstil=new variabler();
    brat1=new nytBraet();
}

    onload=start;
    </script>

    <body>
    </body>
</html>
Avatar billede bearhugx Nybegynder
05. januar 2004 - 00:10 #1
hvorfor, i stedet for at gemme en reference til hver div's element (og derigennem deres style) hvorfor henter du så ikke bare elementet, når du har brug for det (du har jo givet unik ID på alle felterne...)

med f.eks.
  document.getElementById("brat1felt0").style.backgroundColor="red";
Avatar billede bearhugx Nybegynder
05. januar 2004 - 00:13 #2
Og nej, kan ikke pt. svare på hvorfor du kun kan tilgå felt[63] - det kan være fordi jeg ikke har brugt lige så meget tid som du på koden - men for mig virker den ret uigennemskuelig - jeg ville nok gå efter en mere opdelt programmering imellem hvad der er model, og hvad der er output/GUI
Avatar billede erikjacobsen Ekspert
05. januar 2004 - 00:16 #3
Jeg er ikke i stand til at forklare dig præcis hvorfor, men man skal li'som
have en frisk getElementId i hånden. Udvid dit felt-klasse med

    this.setColor=function(color) {
    this.feltElement=document.getElementById(this.feltNavn);
    this.feltElement.style.backgroundColor=color;
    }

og kald den

this.feltObj[62].setColor('blue');
Avatar billede nyp Nybegynder
05. januar 2004 - 00:22 #4
Ja hvorfor gør jeg ikke det?-) det har jeg så gjort og det hjalp, takker.
Smider du et svar.
Avatar billede erikjacobsen Ekspert
05. januar 2004 - 00:24 #5
Mig? Nej, tak. Dels kan jeg ikke forklare hvorfor, dels er 60p for meget
efter min smag. Men jeg lytter med - måske olebole vågner af vinterdvalen
og giver os en af sine berømte forelæsninger. Hey - jeg glæder mig allerede.
Avatar billede roenving Novice
05. januar 2004 - 00:26 #6
-- der skulle være en chance, for jeg har været med i diskussioner, hvor han har deltaget, de to sidste nætter !-)
Avatar billede nyp Nybegynder
05. januar 2004 - 00:28 #7
det var nu også til bearhugx, men I kan da få 15 hver, jeg er glad efter at være gået i sort et par timer.
Avatar billede erikjacobsen Ekspert
05. januar 2004 - 00:32 #8
Nej tak til de 15.

Det burde ikke være nødvendigt at have feltets nummer med som parameter
til tegnfelt - du kan gemme det i en attribut.
Avatar billede nyp Nybegynder
05. januar 2004 - 00:44 #9
Nå det med point er vel også en biting.

Du har muligvis ret jeg kan ikke helt gennemskue det nu, sengetid. nat..
Avatar billede nyp Nybegynder
08. februar 2004 - 23:51 #10
Lukker
Avatar billede nyp Nybegynder
22. februar 2004 - 11:16 #11
lukker igen :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester