Avatar billede supermand69 Nybegynder
29. juli 2004 - 16:32 Der er 15 kommentarer og
1 løsning

set, unset var

Hej

Jeg har problemmer med at få et script til at virke :(

http://clark.avansis.dk/temp/thread/script.htm

Når først jeg har åbnet trådene kan jeg ikke lukke dem igen...

<script type="text/javascript">
var expand = new Array();

function thread_expand(thread)
{
    expand[thread] = true;
   
    var img = 'img'+thread;
    var div = 'div'+thread;
    var td = 'td'+thread;
   
    if(expand[thread])
    {
        document.getElementById(img).src = 'gfx/debate_thread_open.gif';
        document.getElementById(div).style.display = '';
        document.getElementById(td).style.backgroundImage = "url('gfx/debate_thread_bg.gif')";
    }
    else
    {
        document.getElementById(img).src = 'gfx/debate_thread_close.gif';
        document.getElementById(div).style.display = 'none';
        document.getElementById(td).style.backgroundImage = '';
    }
    expand[thread] = !expand[thread];
}
</script>
Avatar billede knudx Nybegynder
29. juli 2004 - 18:12 #1
det ville nok hjælpe at kigge lidt på den første linie i thread_expand...
Du sætter en variabel til (altid) true, hvorefter du bruger den variabel til at afgøre om du skal gøre det ene eller det andet... Spm er 1½ time gammelt nu, så jeg håber du allerede har fundet ud af dét..??
Avatar billede supermand69 Nybegynder
29. juli 2004 - 18:21 #2
hehe... nej, har stadig ikke fattet det.. LOL

du må nok hellere lige fortælle hvad jeg gør galt ;)
Avatar billede knudx Nybegynder
29. juli 2004 - 19:33 #3
Okay. Første linie i din funktion siger:
expand[thread] = true;

Derefter kommer:
if(expand[thread]) {
// fold ud
...
} else {
// fold ind
...
}

Men ligegyldig hvad, så kommer funktionen *aldrig* til "fold ind", for i første linie står der jo, at expand[thread] *altid* skal være "true".
Avatar billede knudx Nybegynder
29. juli 2004 - 20:02 #4
Hvad sker der hvis du erstatter første linie med

if ('undefined' == typeof expand[thread]) expand[thread] = true;
Avatar billede supermand69 Nybegynder
29. juli 2004 - 21:41 #5
hehe... du har jo styr på sagerne *g*

gider du ikke lige forklare mig hvad den linje gør? :)
Avatar billede supermand69 Nybegynder
29. juli 2004 - 21:42 #6
samtidig kan du jo lige lave et svar... hehe
Avatar billede knudx Nybegynder
29. juli 2004 - 22:34 #7
'typeof' er en operator, som returnerer en streng, afhængig af indholdet af en variabel. Hvis variablen ikke er blevet defineret, er den 'undefined'. Andre mulige værdier er 'function', 'number' og 'string'.

M.a.o. expand[thread] bliver sat TRUE, kun hvis det er første gang der bliver pillet ved den.
Avatar billede supermand69 Nybegynder
29. juli 2004 - 22:43 #8
tark ;)

kan du ikke også lige give en lille beskrivelse af:
expand[thread] = !expand[thread];

vil gerne vide hvad det er som jeg laver og ikke bare skrive noget fordi det virker
Avatar billede knudx Nybegynder
29. juli 2004 - 22:44 #9
btw:

function thread_expand(thread)
{
    var img = getElementById('img'+thread);
    var div = getElementById('div'+thread);
    var td = getElementById('td'+thread);
   
    if(div.style.display == 'block')
    {
    // fold ind
        img.src = 'gfx/debate_thread_close.gif';
        div.style.display = 'none';
        td.style.backgroundImage = '';
    }
    else
    {
    // fold ud
        img.src = 'gfx/debate_thread_open.gif';
        div.style.display = 'block';
        td.style.backgroundImage = "url('gfx/debate_thread_bg.gif')";
    }
}

Så drop 'expand' variablen, og test i stedet style.display...
Bemærk at jeg har byttet om på rækkefølgen af fold-u og fold-ind. det er fordi man ikke kan være sikker på hvilken værdi style.display har fra starten (hvis man bruger et stylesheet) derfor er det fedest hvis den ting der skal ske *første gang* står i 'else'.
Avatar billede supermand69 Nybegynder
29. juli 2004 - 22:49 #10
det virker ikke?!
Avatar billede knudx Nybegynder
29. juli 2004 - 22:53 #11
det forrige:
!noget betyder på javascript'sk NOT noget, dvs det boolsk omvendte:
!true == false && !false == true
! operatoren konverterer også en værdi til boolean, hvis den er noget andet. Så i teorien burde det oprindelige script måske virke, hvis bare man *fjernede* den første linie (expand[thread] = true), og så ændrede den flg if til if (!expand[thread])... altså lod den sidste linie konvertere {'undefined'} til {false}, og derpå {false} til {true} (NOT-operationen).
Hvilket komplet vrøvl! Nørderne længe leve!
Avatar billede knudx Nybegynder
29. juli 2004 - 22:53 #12
nej jeg har heller ikke testet det, bare brug den gamle ver.
Avatar billede supermand69 Nybegynder
29. juli 2004 - 22:57 #13
dvs. at den er det samme som:

if(expand[thread] == true) expand[thread] == false;
else expand[thread] == true;
Avatar billede knudx Nybegynder
29. juli 2004 - 22:59 #14
det er lidt tricky det sidste der... jeg troede jeg kunne huske hvad det var, jeg har nemlig lavet en lignenede ting en gang.
Avatar billede knudx Nybegynder
29. juli 2004 - 23:02 #15
sådan:

function toggle (id) {
    var e = document.getElementById ('f'+id).style;
    var f = document.images['h'+id];
    if (e.display == 'none') {
        f.src='billeder/gra/foldi.gif';
        e.display = 'block';
    }
    else {
        f.src='billeder/gra/foldu.gif';
        e.display = 'none';
    }
}
Avatar billede knudx Nybegynder
29. juli 2004 - 23:07 #16
men så var der også et <div style="display:none">, for så kan man godt aflæse værdien fra javascript.
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