[JS]document.body.clientHeight geeft 0 (IE6)

Pagina: 1
Acties:

  • Dr_Frickin_Evil
  • Registratie: Mei 2000
  • Laatst online: 26-05 16:31
Probleempje.
Ik heb een javascriptje:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
function plaats() {
    var footer = document.getElementById('footer');
    var container = document.getElementById('container');
    var scrolldown = document.getElementById('scrolldown');
    var scrollup = document.getElementById('scrollup');

    if (window.innerHeight != null) {
        
        var hoogte = window.innerHeight;
        }
    else if (document.body.clientHeight != null) {
        alert('bla');
        var hoogte = document.body.clientHeight;
        }
    else {
        alert('This site does seem to work right in older browsers, please contact ... for further instructions.');
        /*moet ik nog wat op verzinnen*/
        }
    footer.style.top = hoogte - 40 + "px";
    scrolldown.style.top = hoogte - 24 - 40 + "px";
    scrollup.style.top = hoogte - 24 - 40 + "px";   
    container.style.height = hoogte - 40 - 81 + "px";
    }

Nu werkt het in IE5 en Mozilla wel prima, maar in IE heb ik een nogal raar probleempje, document.body.clientHeight geeft namelijk steeds 0 terug. Ik heb geprobeerd of clientWidth wel werkt, en dat deed het, maar clientHeigt werkt dus niet (in IE5 dus wel!). Weet iemand hoe dit zou kunnen komen?

BTW, dit is de site: http://131.155.240.208/berson/index.php, dat maakt het misschien wat duidelijker.

[ Voor 10% gewijzigd door Dr_Frickin_Evil op 28-01-2004 23:11 ]


  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

JavaScript:
1
if (window.innerHeight != null)

bah! een onbestaande property geeft nooit null maar undefined:

JavaScript:
1
if (typeof window.innerHeight != 'undefined')


en voor IE6, probeer eens document.documentElement.clientHeight

Intentionally left blank


  • Dr_Frickin_Evil
  • Registratie: Mei 2000
  • Laatst online: 26-05 16:31
Als ik met Microsoft Script Editor ga debuggen (erg handig eigenlijk), dan kan ik ctrl+alt+Q (debug->quickwatch), kijken wat de waardes van de properties van de elementen zijn. Kijk ik dan bij document.body, dan staat er bij clientHeight 0, en bij document.body.clientWidth. Erg raar toch?

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Dr_Frickin_Evil schreef op 28 januari 2004 @ 23:18:
Als ik met Microsoft Script Editor ga debuggen (erg handig eigenlijk), dan kan ik ctrl+alt+Q (debug->quickwatch), kijken wat de waardes van de properties van de elementen zijn. Kijk ik dan bij document.body, dan staat er bij clientHeight 0, en bij document.body.clientWidth. Erg raar toch?
Dat ligt eraan; zijn het allemaal absoluut gepositioneerde elementen? zo ja, geef de body dan eens een 100% height.

Intentionally left blank


  • Dr_Frickin_Evil
  • Registratie: Mei 2000
  • Laatst online: 26-05 16:31
Held! Het werkt. Met body height op 100% werkt het idd. Hoe weet je dat toch allemaal zo snel ;)

Maar zodat het werkt moet ik mn code verder nog iets aanpassen:
code:
1
2
3
4
5
6
7
8
9
    if (window.innerHeight != 'undefined') {
        var hoogte = window.innerHeight;
        }
    else if (document.body.clientHeight != 'undefined') {
        var hoogte = document.body.clientHeight;
        }
    else {
        alert('This site does seem to work right in older browsers, please contact sales@bersonuv.com for further instructions.');
        }

Als ik bij else if, de else weglaat, dan doet ie het wel, maar waarom? Hij skipt de 1e if-statement, en die 2e is waar, maar waarom gaat ie daar dan niet doorheen?

[ Voor 67% gewijzigd door Dr_Frickin_Evil op 28-01-2004 23:38 ]


  • HansMij
  • Registratie: Mei 2002
  • Laatst online: 27-05 22:16
Als je netjes programmeerd, en je wilt gewoon kijken of een variable waarde1, waarde2 of iets anders heeft, dan gebruik je toch gewoon een case-select??

offtopic:
begint dit topic niet een beetje op een script-request te lijken??

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

if () {} else if () {} is gewoon goed hoor...

[ Voor 184% gewijzigd door crisp op 28-01-2004 23:43 ]

Intentionally left blank


  • Dr_Frickin_Evil
  • Registratie: Mei 2000
  • Laatst online: 26-05 16:31
HansMij schreef op 28 januari 2004 @ 23:36:
Als je netjes programmeerd, en je wilt gewoon kijken of een variable waarde1, waarde2 of iets anders heeft, dan gebruik je toch gewoon een case-select??

offtopic:
begint dit topic niet een beetje op een script-request te lijken??
Pardon? Dit is echt zo'n probleempje waar ik me blind op kan staren. Heb vanalles afgezocht, maar ik kreeg het gewoon niet gevonden. Je kan niet alles weten he...

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

HansMij schreef op 28 januari 2004 @ 23:36:
Als je netjes programmeerd, en je wilt gewoon kijken of een variable waarde1, waarde2 of iets anders heeft, dan gebruik je toch gewoon een case-select??

offtopic:
begint dit topic niet een beetje op een script-request te lijken??
dat ligt helemaal aan de situatie; zie de voorbeeldcode; dat kan je niet* met een case doen hoor.
En ik zie geen scriptrequest verder :?

*
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
var height = 0;
switch (true) {
  case (typeof window.innerHeight != 'undefined'):
    height = window.innerHeight;
    break;
  case (typeof document.body.clientHeight != 'undefined'):
    height = document.body.clientHeight;
    break;
  default:
    alert('WTF?');
}


dit kan dus alleen omdat JS een geinterpreteerde taal is, in een gecompileerde taal als C of JAVA is dit uit den boze; daarnaast is het ook wel een beetje vies en kan je beter een if-else constructie gebruiken ;)

Intentionally left blank


  • Dr_Frickin_Evil
  • Registratie: Mei 2000
  • Laatst online: 26-05 16:31
Hmm Crisp, je adviseerde me om ipv "!= null" "!= 'undefined'" te gebruiken. Als ik undefined gebruik echter, dan gaat IE6 wel door de 1e if statement (met als gevolg dat de else if statement niet werkte). Gebruik ik echter wel null, dan werkt het allemaal prima.
Ik geloof je graag dat het 'undefined' ipv null zou moeten zijn, maar waarom werkt dat nu juist niet, en null weer wel?

Laatste vraagje, ik geef, als beide if-statements worden overgeslagen een alert met 'This site does seem to work right in older browsers, please contact ... for further instructions.'. Natuurlijk niet netjes, maar ik vind het een beetje onzin om voor oude browser die dit niet snappen (zijn die er?), m'n code aan te moeten blijven passen. Deze site is voor een bedrijf, dus moet ik eigenlijk zorgen dat ie in alle gevallen werkt, maar dat bedrijf kwam zelf met een aantal eisen, die niet zonder JS op te lossen zijn. Wat vinden jullie? Mensen moeten maar meegaan met de tijd, of niet? Ik vind dat als Mozilla en de nieuwere versies van IE het doen, dat ik mijn werk gedaan heb.

[ Voor 50% gewijzigd door Dr_Frickin_Evil op 29-01-2004 00:14 ]


  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Dr_Frickin_Evil schreef op 28 januari 2004 @ 23:54:
Hmm Crisp, je adviseerde me om ipv "!= null" "!= 'undefined'" te gebruiken. Als ik undefined gebruik echter, dan gaat IE6 wel door de 1e if statement (met als gevolg dat de else if statement niet werkte). Gebruik ik echter wel null, dan werkt het allemaal prima.
Ik geloof je graag dat het 'undefined' ipv null zou moeten zijn, maar waarom werkt dat nu juist niet, en null weer wel?
[...]
Heb je er ook wel typeof voor gezet?

Wat betreft oudere browsers; dat is de least of your worries want deze constructie werkt zelfs in IE4 en NS4. Echter blijkt uit onderzoeken dat zo'n 10% van de gebruikers javascript uit hebben staan...

Intentionally left blank


  • Dr_Frickin_Evil
  • Registratie: Mei 2000
  • Laatst online: 26-05 16:31
Uh hehe, overheen gelezen zullen we maar zeggen. Het werkt weer.

Wat betreft het eventueel niet ondersteunen van javascript. Ik heb nu gezorgd dat de site het nu gewoon goed doet, zonder javascript. Ik heb m'n css-file zo aangepast dat het meteen werkt, en mocht Javascript wel aanstaan, dan past ie een paar waardes aan zodat het er wat aantrekkelijker en gebruiksvriendelijker uitziet. Zonder javascriptondersteuning is het wel wat minder mooi (lelijke horizontale en verticale scrollbalken in de contentlayer), maar het werkt wel allemaal.
Pagina: 1