Oprettet tir. d. 08. februar 2011 kl. 11:16:39

joeblack
joeblack (16.882 point. Point ude: 320)

Display='none' på alle divs virker ikke

Hej eksperter !

Nu gider jeg ikke stirre mig blind på det længere....!

Jeg har et script, der sætter display:'none' på alle åbne divs:

var oActive = null;
function ShowHideContent(divID)
{
    var oDiv = document.getElementById(divID);
    if (oActive) oActive.style.display = 'none';
    if (oDiv==oActive) return oActive = null;
    oActive = oDiv;
    oActive.style.display = 'block';
}

Jeg bruger sommetider et andet til at åbne nogle af dem (når jeg ikke vil lukke andre):

function Toggle(id) {
    var state = document.getElementById(id).style.display;
        if (state == 'block') {
            document.getElementById(id).style.display = 'none';
        } else {
            document.getElementById(id).style.display = 'block';
        }
    }

Nu er problemet, at "ShowHideContent" ikke lukker dem, jeg har åbnet med Toggle - ved nogen hvorfor ???

/Frederik

Skrevet tir. d. 08. februar 2011 kl. 11:28:32| #1

jakobdo
jakobdo (181.727 point)
www.codebreaker.dk
Bruger du evt. firefox ?
Hvis ja, smid firebug på og fejlsøg den vej?
Bliver display rent faktisk sat til block / none osv.. ?

Skrevet tir. d. 08. februar 2011 kl. 11:32:29| #2

joeblack
joeblack (16.882 point)
Hej Jakob

Nej, jeg bruger IE

"Bliver display rent faktisk sat til block / none osv.. ? " Tja, umiddelbart vises og lukkes divs fint - altså bortset fra, når jeg så vil lukke dem, der er åbnet med Toggle.

Skrevet tir. d. 08. februar 2011 kl. 11:35:11| #3

softspot
softspot (101.915 point)
www.softspot.dk
Og hvis du kører IE8, kan du hive debuggeren frem med F12 ;-)

Anyway! Prøv evt. med nedenstående rettelse:

function Toggle(id) {
    var state = document.getElementById(id).style.display;
        if (state != 'none') {
            document.getElementById(id).style.display = 'none';
        } else {
            document.getElementById(id).style.display = 'block';
        }
    }

Skrevet tir. d. 08. februar 2011 kl. 11:42:18| #4

intenz
intenz (44.450 point)
underenplov.dk
ShowHideContent bruger en variabel (oActive) til at 'lukke' den seneste åbnede div. Toggle opdaterer ikke denne variablen, derfor har ShowHideContent ikke noget at lukke.

Du kan gemme den i din Toogle funktion.

function Toggle(id) {
    var state = document.getElementById(id).style.display;
        if (state == 'block') {
            document.getElementById(id).style.display = 'none';
        } else {
            oActive = document.getElementById(id);
            oActive.style.display = 'block';
        }
    }


Det vil dog aldrig virke hvis du bruge Toogle på flere divs inden du kører ShowHideContent. Så vil den kun lukke den seneste, da variablen kun kan indeholde en værdi.

Skrevet tir. d. 08. februar 2011 kl. 11:46:35| #5

joeblack
joeblack (16.882 point)
Hej softspot

Sorry, jeg kender ikke debuggeren :-(

Anyway, den foreslåede rettelser virker ikke. Det er nu heller ikke Toggle-funktionen der driller. Det er ShowHideContent, der starter med at lukke dem, der er åbnet med Toggle...giver det mening ?

Skrevet tir. d. 08. februar 2011 kl. 11:48:35| #6

joeblack
joeblack (16.882 point)
Hej intenz

OK, det giver mening.

Hvordan kan gøre, så jeg lukker alle åbne divs og åbner den jeg trykket på ?

Skrevet tir. d. 08. februar 2011 kl. 11:59:56| #7

intenz
intenz (44.450 point)
underenplov.dk
Du skal bruge et array i stedet for en variablen.

Prøv denne (ikke testet):

var oActive = [];
function ShowHideContent(divID) {
    var oDiv = document.getElementById(divID);
    if (oActive.length > 0) {
        // lukke alle divs i array
        for (var i=0; i<oActive.length; i++) {
            oActive[i].style.display = 'none';
        }
        // nulstille array
        oActive = [];
    }
   
    // tilføje ny div til array
    oActive.push(oDiv);

    // åbne ny div
    oActive.style.display = 'block';
}

function Toggle(id) {
    var div = document.getElementById(id);
    var state = div.style.display;
    if (state == 'block') {
        // fjerne denne div fra array
        var newArray = [];
        for(var i=0; i<oActive.length; i++) {
            if (oActive[i] != div) {
                newArray.push(oActive[i]);
            }
        }
        oActive = newArray;

        // skjul div
        document.getElementById(id).style.display = 'none';
    } else {
        // tilføj div til array og vis
        oActive.push(div);
        document.getElementById(id).style.display = 'block';
    }
}

Skrevet tir. d. 08. februar 2011 kl. 12:03:28| #8

jakobdo
jakobdo (181.727 point)
www.codebreaker.dk
Og i stedet for at rode så meget med js, så overvej evt. at kigge på libs ala jquery, prototype etc.

Skrevet tir. d. 08. februar 2011 kl. 12:21:57| #9

joeblack
joeblack (16.882 point)
@intenz -> Det virker ikke :-(

Skrevet tir. d. 08. februar 2011 kl. 12:51:04| #10

intenz
intenz (44.450 point)
underenplov.dk
Ah, der var en skrivefejl.

Ret i ShowHideContent

    // åbne ny div
    oActive.style.display = 'block';


til:

    // åbne ny div
    oDiv.style.display = 'block';

Skrevet tir. d. 08. februar 2011 kl. 13:47:11| #11

joeblack
joeblack (16.882 point)
Perfekt. Takker mange gange !

Skriv et indlæg




Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] [img]link til billede[/img]
Web- og emailadresser omdannes automatisk til links

Log ind

   

   

Seneste spørgsmål

Hjælp til validering

Oprettet den 26. maj 2012 kl. 14.01
Stefan1 giver 20 point for svar | Giv et svar »

Javascript sliders?

Oprettet den 24. maj 2012 kl. 11.29
NizeGuy giver 15 point for svar | Giv et svar »

Validere navn i form

Oprettet den 22. maj 2012 kl. 15.13
13thsky giver 60 point for svar | Giv et svar »



   




Tips & Tricks fra PC World

Teaser billede

Læserne: Her er vores værste it-indkøb

Det er ikke al it-udstyr, som er det rene guld. Her er nogle af læsernes skrækhistorier.


Anmeldelser fra PC World

Teaser billede

Test: Mobil med Ferrari-design - og en Trabant-motor

Motorola har begået endnu en smartphone med lækkert design og potentiale til at være blandt de bedste. Men den når ikke i mål. Se her hvorfor.


Seneste blogindlæg

Teaser billede

Tvangslukke spørgsmål: Hvad er den bedste løsning?

Hej Vi har mange åbne spørgsmål på Eksperten. Vi ville gerne tvangslukke dem - så et spørgsmål efter f.eks. 6 måneder lukkes. Men der er et par uklarheder som ville være gode at få lidt input til:...


Nyheder fra PC World

Teaser billede

Sådan siger du farvel til Facebook

Læs her, hvordan du dropper Facebook og i stedet anvender nogle brugervenlige alternativer, så du stadig kan være social på nettet.


Nyheder fra Computerworld

Teaser billede

Galleri: De fedeste håndholdte gennem 40 år

Her har du de mest banebrydende håndholdte computere gennem alle tider.


Kurser
Samarbejdspartnere

Udgiver · © 2012 IDG Danmark A/S · Hørkær 18 · 2730 Herlev · Tlf.: 77 300 300 · Fax: 77 300 301 · Brug af personoplysninger