Avatar billede monkeysee Nybegynder
16. maj 2001 - 05:53 Der er 4 kommentarer og
1 løsning

Array funktion som generer tabel

Mit spørgmål består af 2 problemer, med fælles udgangspunkt.

Jeg er ved at lære array funktionen i Javascript, og har tænkt mig at lave en dynamisk generet tabel der benytter sig af en 2-dimensionel array.

Når jeg generer tabellen tager jeg hovedarray (DSB_array) og \"skærer\" i 5 dele(DSB_line), der hver især består af 3 værdier som efterfølgende generer en celle hver.

Men den 3.celle i hver række er \"undefined\" når tabellen genereres, se det selv i aktion ved at uncommente min alert funktion.

Desuden er reverse() funktionen heller ikke uden problemer, den burde generere en spejlvendt udgave (tabellen skulle gerne fremstå som en sidelæns \"pil\")??


-CUT\'N\'PASTE--------------------------

<html>
<head>
</head>
<SCRIPT LANGUAGE=\"JavaScript1.3\">
<!--

function init() {
DSB_array = new Array(15)
DSB_array[0] = \"1\"
DSB_array[1] = \"0\"
DSB_array[2] = \"0\"
DSB_array[3] = \"1\"
DSB_array[4] = \"1\"
DSB_array[5] = \"0\"
DSB_array[6] = \"1\"
DSB_array[7] = \"1\"
DSB_array[8] = \"1\"
DSB_array[9] = \"1\"
DSB_array[10] = \"1\"
DSB_array[11] = \"0\"
DSB_array[12] = \"1\"
DSB_array[13] = \"0\"
DSB_array[14] = \"0\"
}

function generate() {

DSB_line = new Array(5)
DSB_line[0] = DSB_array.slice(0,2)
DSB_line[1] = DSB_array.slice(3,5)
DSB_line[2] = DSB_array.slice(6,8)
DSB_line[3] = DSB_array.slice(9,11)
DSB_line[4] = DSB_array.slice(12,14)

    for (n = 0; n < 5; n++) {
        document.writeln(\'<table border=\"1\" cellpadding=\"0\" cellspacing=\"0\" width=\"100\">\');
        document.writeln(\'    <tr>\');
        for (i = 0; i < 3; i++) {
   
//    alert (\"n:\"+n+\" i:\"+i+\"\\n\"+DSB_line[n][i])  // til debug formål
   
            if (DSB_line[n][i]==\"1\") {
                document.writeln(\'        <td bgcolor=\"#000000\" height=\"30px\"></td>\');
            }
            else {   
                document.writeln(\'        <td></td>\');   
            }
        }
        document.writeln(\'    </tr>\');
        document.writeln(\'</table>\');
    }
}

function revert() {
DSB_array.reverse()
generate()
}

-->
</SCRIPT>

<body onload=\"init();\">

<a href=\"java script:generate();\">generate</a> | <a href=\"java script:revert();\">revert</a></p>

</body>
</html>
Avatar billede jakoba Nybegynder
16. maj 2001 - 06:53 #1
// slice extracts up to but not including end.  slice(1,4) extracts the second element through the fourth element (elements indexed 1, 2, and 3)

DSB_line[0] = DSB_array.slice(0,3);    // elements indexed 0,1,2
DSB_line[1] = DSB_array.slice(3,6);    // 3,4,5
DSB_line[2] = DSB_array.slice(6,9);    // etc
DSB_line[3] = DSB_array.slice(9,12);
DSB_line[4] = DSB_array.slice(12,15);

Som du bruger reverse() vil den spejlvende tabellen både lodret og vandret. Det giver hen en pil imod venstre. (den lodrette spejling er ligegyldig.
prøv evt med andre teng end kun \"0\" og \"1\" så du kan se hvad der bliver reverset hvorhen.

var DSB_array;  // bør stå udenfor funktionen init
function init() {
DSB_array = new Array(15)
DSB_array[0] = \"1\"
DSB_array[1] = \"0\"
DSB_array[2] = \"0\"
DSB_array[3] = \"2\"
DSB_array[4] = \"3\"
DSB_array[5] = \"0\"
DSB_array[6] = \"4\"
DSB_array[7] = \"5\"
DSB_array[8] = \"6\"
DSB_array[9] = \"7\"
DSB_array[10] = \"8\"
DSB_array[11] = \"0\"
DSB_array[12] = \"9\"
DSB_array[13] = \"0\"
DSB_array[14] = \"0\"
};

Bemærk jeg erklærer DSB_array udenfor funktionen init(). Det er ikke javascript, men en bug i IE der får dit program til at virke uden. For at få IE til at generere korrekt kode bør du ALDTID bruge var eller objektnavn når du opretter en ny variabel.
var olsen = 25: // generer variabel i dette scope
mit_objekt.olsen = 25; // genererer intern variabel i nit_objekt.

mvh JakobA
Avatar billede jakoba Nybegynder
16. maj 2001 - 07:11 #2
Sorry, det med at bruge andre cifre end \"1\" virker næppe da du ikke skrive tegnet.
Du ku evt prøve:
            if (DSB_line[n][i]!=\"0\") {
                document.writeln(\'        <td bgcolor=\"#000000\" height=\"30px\">\'+DSB_line[n][i]+\'</td>\');
            }
            else { 
                document.writeln(\'        <td>0</td>\'); 
            }

inde i for-løkken istedet.

PS: du bruger linkst til at aktivere generate() og reverse() ??
  jeg ville forvente at første klik overskriver dokumentet.

mvh JakobA
Avatar billede monkeysee Nybegynder
16. maj 2001 - 12:35 #3
JacobA > tak for det hurtige svar, jeg vil lige afprøve dine foreslag først...mht.linket der overskriver dokumentet, så er det meningen at koden skal skrive til et dHtml lag, derfor...
.
Avatar billede monkeysee Nybegynder
16. maj 2001 - 12:40 #4
Det virker !!!! Du har nu fået 30 point sat ind på kontoen - uden kvittering:-)
.


Avatar billede jakoba Nybegynder
16. maj 2001 - 21:11 #5
takker.
( men du har nu glemt at trykke accepter :)
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