Avatar billede purup Nybegynder
07. december 2006 - 21:19 Der er 17 kommentarer og
1 løsning

problem med display og js

Hej

Jeg bruger

@media print{
  .noprint {display: none;
}
@media screen{
  .printOnly {display: none;}
}

...til at styre hjemmesidens udseene på skærmen og print.
Det virkede fint.

Hjemmesiden har 4 faner. Med javascript sættes
document.getElementById("fane1").style.display = "none";
document.getElementById("fane2").style.display = "inline";
...så det aktuelle content vises.
Da det blev implementeret virkede print/skærm featuren ikke længere.

Jeg gætter på at javascript overskriver print og skræm styles.
Hvordan kan jeg fikse det ?
Avatar billede purup Nybegynder
07. december 2006 - 21:22 #1
document.getElementById("fane1").style.display = "none";
document.getElementById("fane2").style.display = "inline";

...dette kode står selvf. o en funktion som bliver kaldt når man trykker på menu-knapperne
Avatar billede softspot Forsker
07. december 2006 - 22:17 #2
Kan det mon være noget så basalt som en tuborgklamme for lidt...?

@media print{
  .noprint {display: none;}
}
@media screen{
  .printOnly {display: none;}
}
Avatar billede softspot Forsker
07. december 2006 - 22:20 #3
Eller skal du evt. benytter "block" i stedet for "inline"...?
Avatar billede olebole Juniormester
08. december 2006 - 09:46 #4
<ole>

1) Hvad burde ske?
2) Hvad sker?
3) Hvad sker ikke?

/mvh
</bole>
Avatar billede purup Nybegynder
08. december 2006 - 15:38 #5
softspot> tror det ikke - kan godt se der mangler lidt reklame i mit eksempel, men var noget jeg skrev eksklusivt her til spørgsmålet.

Siden kan se på:
www.gun.dk/np
www.gun.dk/stylesheet.css

Menuen virker fint - den viser 1 fane ad gangen ved at sætte display:none på de andre faner.
Når man printer skulle man så gerne få printet alle 4 faner.

Alle 4 faner er af klassen .alwaysPrint som er defineret som
@media print{
    .neverPrint {
        display: none;
    }
    .alwaysPrint {
        display: block;
    }
}
...men det bliver ignoreret! Hvorfor???
(menuen, som ikke skal printe, er af klassen neverPrint, og det virker)
Avatar billede purup Nybegynder
08. december 2006 - 15:38 #6
whops - stylesheetet ligger selvfølgelig på www.gun.dk/np/stylesheet.css
Avatar billede softspot Forsker
08. december 2006 - 16:37 #7
Umiddelbart har jeg en teori om at det er fordi du ændrer på stylen display direkte i stedet for at holde fast i den class som elementerne har.

Jeg ved at olebole og en håndfuld andre brugere her på sitet vil slå mig oven i hovedet når jeg foreslår flg. løsning (men umiddelbart vil jeg mene det er den mest gennemskuelige):

Sørg for at skifte class på elementerne i stedet for at sætte display, for så kan du i dit stylesheet stadig definere at den valgte class skal vises på print- men ikke på screen-mediet. Noget i stil med:

@media print{
    .neverPrint {
        display: none;
    }
    .alwaysPrintShow {
        display: block;
    }
    .alwaysPrintHide {
        display: block;
    }
}
@media screen{
    .printOnly {
        display: none;
    }
    .alwaysPrintShow {
        display: block;
    }
    .alwaysPrintHide {
        display: none;
    }
}

og så noget i stil med denne JS:

document.getElementById("fane1").style.setAttribute("class", "alwaysPrintHide");
document.getElementById("fane2").style.setAttribute("class", "alwaysPrintShow");

...og for IE, skal det nok være noget med:
document.getElementById("fane1").style.setAttribute("className", "alwaysPrintHide");
document.getElementById("fane2").style.setAttribute("className", "alwaysPrintShow");


En fodnote til det sproglige på sitet (hvis det har nogen interesse):
"summery" betyder "sommerlig" på dansk, "summary" betyder "kortfattet" eller "resumé" på dansk ("resume" betyder så enten "genoptag" på dansk eller "CV"... på latin :)).
Avatar billede softspot Forsker
08. december 2006 - 16:41 #8
...og grunden til at olebole og andre "ekspert-bruger-spankere" her på sitet skulle slå mig oven i hovedet for at foreslå den løsning, er jo naturligvis, at det performer dårligt, at skifte et elements class ud i stedet for at skifte de enkelte styles direkte. Men som sagt, synes jeg den tekniske løsning virker lidt mere gennemskuelig, hvis man bare udskifter klassen (denne udtalelse medfører givetvis et par forslag på hvordan det kan gøres på den "rigtige"/mest optimale måde - man kan jo håbe :)).
Avatar billede softspot Forsker
08. december 2006 - 16:42 #9
Rettelse: "ekspert-bruger-spankere" skulle naturligvis være "eksperten-bruger-spankere" (selvom man ikke skal sætte sit lys under en skæppe, så hersker Janteloven jo trods alt her i landet ;-)).
Avatar billede purup Nybegynder
09. december 2006 - 17:56 #10
Jeg kan ikke rigtigt få det til at virke.
Når jeg implementerer
document.getElementById("summary").style.setAttribute("class", "printOnly");
er der ingenting der virker længere ?
Avatar billede softspot Forsker
09. december 2006 - 23:36 #11
Skal det at du nu skriver "summary" så tolkes således at du har konsekvensrettet fra sommerlig til resumé...? Eller er det derfor ingenting fungerer nu...?

Jeg kan ikke helt gennemskue hvorfor du vil skifte klassen til printOnly. Min tanke var at du skiftede mellem alwaysPrintHide og alwaysPrintShow, når du skiftede fane. På den måde bliver du, på en let måde, i stand til at sætte de to tilstande i hvert deres medie (som jeg viste med eksemplet).

Eller er det mig der helt har misforstået hvad du vil?
Avatar billede purup Nybegynder
10. december 2006 - 11:46 #12
Nix - det har du ikke.
Og tak for stavehjælp (det havde jeg aldrig selv fundet), men det er nu ikke det. Jeg rettede det selvfølgelig alle steder.

Jeg er ikke nogen haj til js, men det virker fint hvis jeg ændrer dit:
Document.getElementById("fane1").style.setAttribute("class", "alwaysPrintHide");
til:
Document.getElementById("fane1").setAttribute("class", "alwaysPrintHide");

Giver det ikke også god mening?
Mange tak for hjælpen. Du skal selvfølgelig have point så læg lige et svar.
Avatar billede purup Nybegynder
10. december 2006 - 11:47 #13
(du kan se det i funktion på www.gun.dk/np www.gun.dk/np/stylesheet.css)
Avatar billede softspot Forsker
10. december 2006 - 11:54 #14
10/12-2006 11:46:25 >> Jo, du har da helt ret! Jeg undskylder mit manglende overblik, det er naturligvis ikke elementets style man skal sætte class på, men på selve elementet (godt set :)).

NB: Nu siger du godt nok at du har rettet stavefejlen alle steder, men den mangler at blive rettet det vigtigste sted, nemlig i menuen... :)

Velbekomme :)
Avatar billede purup Nybegynder
10. december 2006 - 21:55 #15
øh, jep - der var selvfølgelig lige menu'en ;-)
Tak for hjælpen
Avatar billede softspot Forsker
10. december 2006 - 22:04 #16
Det var så lidt og tak for point :)
Avatar billede olebole Juniormester
11. december 2006 - 09:52 #17
Pas på med 'class' ... sammen med set- og getAttribute virker det ikke i IE!

IE (i hvertfald til og med version 6.0 ... jeg er ikke sikker på 7.0) insisterer på, man skriver 'className' i stedet  :o|
Avatar billede softspot Forsker
11. december 2006 - 10:16 #18
olebole >> Jeg nævnte dette i mit indlæg fra 08/12-2006 16:37:19. Jeg har dog nok forsømt at lave et komplet eksempel på hvordan man checker hvilken browser koden kører i... :)
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