Avatar billede extremecode Nybegynder
24. august 2005 - 14:06 Der er 17 kommentarer og
1 løsning

Problemer med script min- /max-width ala CSS metoden

Hej Jeg ønsker at kunne bruge min-width og max-width i IE.
Men da dette ikke kan lade sig gøre ved CSS, har jeg prøvet i JavaScript.

Men Kan ikke få det til at lykkes..
Jeg får nu en "has no proberties fejl"

Scriptet som følger:

var page;

function rLoad(){
    page = document.getElementById("page");
}

function rSize(page) {   
    var wauto    = page.currentStyle.width;
    var wMaxclient    = 964;
    var wMinclient    = 770;
    var wMinwidth    = 708;
    var wMaxwidth    = 900;
   
    var wWidth = window.innerWidth ? window.innerWidth : document.body.clientWidth;

    if ( wWidth > wMaxclient && this.sSize != "max" ) this.sSize = "max";
    else if ( wWidth < wMinclient && this.sSize !="min" ) this.sSize = "min";
    else if ( wWidth < wMaxclient && wWidth > wMinclient && this.sSize != "auto" ) this.sSize = "auto";
    switch ( this.sSize ) {
            case "min" :
                this.style.width = wMinwidth + "px";
            break;
            case "max" :
                this.style.width = wMaxwidth + "px";
            break;
            case "auto" :
                this.style.width = wauto;
            break;
    }
}


window.onload = rLoad();
window.onresize = rSize(page);

og i htmlkoden

har jeg så:

<div id="page">
<p>testing</p>
</div>

Probelemt som jeg kan se det er at onresize metoden bliver kørt før onload...og derfor ikke for oprette objectet/parameteren.

Kan i hjælpe mig færdig med det eller eventuelle komme med hints til hvordan jeg kan får skidtet til at virke.
Avatar billede roenving Novice
24. august 2005 - 14:14 #1
Hvordan kan du bruge this, når du ikke har et objekt ?-)

-- jeg ville, hvis du har ret i din formodning, kapsle hele rSize ind i en if(page){}

-- og så skal du fjerne paranteser og argumentet fra funktionstildelingerne, for der må ikke være noget sådant, og følgelig også fjerne page fra funktionsdefinitionen !-)

Inde i rSize skal du så skifte this ud med page (som jeg også ville finde et andet navn til, men det er i hvert fald ikke fejlen !-)
Avatar billede roenving Novice
24. august 2005 - 14:19 #2
Altså sådan:

<script type="text/javascript">
var page;

function rLoad(){
    page = document.getElementById("page");
    rSize();
}

function rSize() {   
    var wauto    = page.offsetWidth;
    var wMaxclient    = 964;
    var wMinclient    = 770;
    var wMinwidth    = 708;
    var wMaxwidth    = 900;
   
    var wWidth = window.innerWidth ? window.innerWidth : document.body.clientWidth;

    if ( wWidth > wMaxclient && page.sSize != "max" ) page.sSize = "max";
    else if ( wWidth < wMinclient && page.sSize !="min" ) page.sSize = "min";
    else if ( wWidth < wMaxclient && wWidth > wMinclient && page.sSize != "auto" ) page.sSize = "auto";
    switch ( page.sSize ) {
            case "min" :
                page.style.width = wMinwidth + "px";
            break;
            case "max" :
                page.style.width = wMaxwidth + "px";
            break;
            case "auto" :
                page.style.width = wauto;
            break;
    }
}


window.onload = rLoad;
window.onresize = rSize;
</script>

og i htmlkoden

har jeg så:

<div id="page" style="background:#19f;">
<p>testing</p>
</div>
Avatar billede extremecode Nybegynder
24. august 2005 - 14:48 #3
Hej Roenving

rettede et par småting i dit script og nu kører det bare.
Godt gået og mange tak for hjælpen..

Så er der min/max-width for IE.

Svar og få dine point.
Avatar billede roenving Novice
24. august 2005 - 14:51 #4
Velbekomme '-)

-- og jeg testede lige min udgave i de andre browsere også, selvom de jo understøtter tingen, derfor brugte jeg offsetWidth !-)
Avatar billede extremecode Nybegynder
24. august 2005 - 15:01 #5
Jepper det er super godt.

Takker mange gange Roenving
Avatar billede roenving Novice
24. august 2005 - 15:02 #6
-- og jeg takker for point ;~}
Avatar billede olebole Juniormester
24. august 2005 - 19:56 #7
<ole>

Med al respekt - den løsning duer ikke i andet end Mozilla  :)

Det, man henter i andre browsere, er bredden af body-elementet ... ikke vinduets indre bredde. Den hentes derimod med:
    document.documentElement.clientWidth

/mvh
</bole>
Avatar billede olebole Juniormester
24. august 2005 - 20:03 #8
- og så ved jeg jo, du vil bruge det i et XHTML-dokument - men så kan du jo ikke have den slags scripts i dit dokument. Det crasher jo browseren, hvis den forsøger at vise det som XHTML ... hvilket, der dog nok ikke er en eneste browser i denne verden, der prøver  ;o)
Avatar billede roenving Novice
24. august 2005 - 22:55 #9
Tjah, jeg prøvede jo så kun tingen i IE6sp2, FireFox 1.06 og Opera 8.02, men husker ikke, om jeg gjorde mig den umage at kaste et fuldt html-dokument inklusive doctype i !-)
Avatar billede olebole Juniormester
24. august 2005 - 22:58 #10
- hvilket jo ikke er helt uvæsentligt  ;o)
Avatar billede extremecode Nybegynder
25. august 2005 - 10:00 #11
Har dog fået løsningen til at virke i xhtml...da jeg ikke benytter mig af andet.
så det virker fint nok i IE 6.0. har dog ikke prøvet IE 5.5
Avatar billede olebole Juniormester
25. august 2005 - 18:40 #12
IE6 kan slet parse XHTML, så nej ... du skriver med garanti HTML4 - men tror uden tvivl, det er XHTML  :)

Af alle de XHTML-dokumenter, jeg har set på WWW, er der kun nogle ganske få stykker, der parses som XHTML.
99.9% af alle XHTML-dokumenter på WWW parses som dårlig og fejlfyldt HTML4, fordi de , der skriver tutorials, ikke aner, hvad XHTML er. Det betyder naturligvis så, at de, der 'lærer' XHTML på den måde, heller ikke aner, hvad XHTML er  ;o)
Avatar billede extremecode Nybegynder
25. august 2005 - 22:28 #13
ok har nu altid holdt mig hvad der står på w3 og w3schools men de er måske forkert på den eller??

og når siden bliver valideret gennem W3 som xhtml1.0 strict er dette også forkert eller??
Avatar billede extremecode Nybegynder
25. august 2005 - 22:35 #14
Så vidt jeg ved er det xhtml 2.0 IE6 ikke kan parse da denne benytter elementer så som <h></h><nl></nl><section></section> osv som IE 6.0 ikke understøtter.
Avatar billede olebole Juniormester
25. august 2005 - 22:41 #15
Ja, w3schools er fyldt med fejl, misforståelser og udeladelser - men det er jo også en privat nordmands værk - og har som sådan ikke andet med W3C at gøre end lidt snylteri på navnet.
Det er ikke sålænge siden, vi i et andet spørgesmål fandt 5-6 faktuelle fejl på en enkelt side. Det er meget, når man tænker på, hvormeget reklamerne udgør af indholdet ... og det er desværre ikke et særsyn på det site. Men bevares, der er skam også huller mellem fejlene  ;o)

Nej, du læser åbenbart ikke, hvad W3C skriver. Gjorde du det, ville du vide, hvor ubrugelig standarden er idag. Det står højt og tydeligt i deres FAQ om XHTML, men så langt er der ikke mange, der strækker deres undersøgelser - omend, det nok burde være dér, man begyndte  :)

Prøv at læse de her to:
    http://www.eksperten.dk/artikler/537
    http://www.eksperten.dk/artikler/538

- så lærer du nok et og andet, du ikke vidste  ;o)

- og til din sidste kommentar: Ja, IE kan _heller_ ikke parse 2.0 ... men der er mest sandsynligt ingen browser, der parser dine sider som XHTML  :)
Avatar billede extremecode Nybegynder
25. august 2005 - 22:50 #16
hmm ok, tror jeg kan se problematikken....
Dog mener jeg uden at reklamere for noget at sydbank dog er xhtml da denne bliver serveret med xml data samt bruge en speciel form for javascripting osv.

Men du må gerne korrektere mig her hvis jeg er forkert på den.
Er her jo kun for at få lidt større forståelse for tingene.
Avatar billede olebole Juniormester
26. august 2005 - 00:03 #17
Dokumenterne sendes med korrekt MIME, men jeg kan umiddelbart se et enkelt tilfælde af document.write. Hvis den script-stump bliver brugt, er det øjeblikkelig HTML-parseren, der overtager dokumentet.

Det ville også undre mig, om ikke document.location vil udløse fejl i XML-parseren og lade HTML overtage ... det har i øvrigt været deprecated syntaks i 7-8 år  :)

Derudover skal attributter sættes med setAttribute() - og aflæses med getAttribute(). Den 'direkte' metode hører til under HTML-DOM/Script bindingerne.

Hvis du prøver at skrive:
    java script:alert(document.compatMode)
- i adresselinjen i IE og trykke 'Return', kan du se, der returneres 'backCompat'. Det betyder, store dele af CSS er disabled i IE - og skyldes XML-prologen før DTD'en  :o|

http://msdn.microsoft.com/library/default.asp?url=/workshop/author/dhtml/reference/properties/compatmode.asp
- klik evt. på linket i bunden af siden og læs under The Doctype Switch
Avatar billede extremecode Nybegynder
26. august 2005 - 10:56 #18
OK tak for den gode Info Olebole, der er til lidt god godnat læsning.
Det er jo altid rart at lære noget nyt =)
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