[JS]IE probleem met document.getElementById

Pagina: 1
Acties:

  • Wizz15
  • Registratie: Januari 2004
  • Laatst online: 26-10-2022
Ik heb een script dat automatisch rij-kleuren in een tabel veranderd. In firefox werkt alles goed, alleen in IE krijg ik een vage foutmelding:
Regel: 12
Teken: 2
Fout: Deze eigenschap of methode wordt niet ondersteund door dit object
Code: 0
Regel 12 was dus leeg in mijn script, maar als ik van regel 11 een comment maak is de error weg.

Regel 11 is de regel overview = document.getElementById('overview');. Het lijkt erop dat IE het element met id 'overview' (de tabel) niet kan vinden, terwijl deze er toch weldegelijk is.

Hieronder mijn javascript functie:
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
function scanRows() {
    if( !document.getElementById ) return false;
    //if( !document.getElementById('overview') ) return false;

    overview = document.getElementById('overview');

    table_rows = overview.getElementsByTagName('tr');

    for( i = 0; i < table_rows.length; i++ ) {
        if( i % 2 != 0 )
            table_rows[i].className = "row_light";
    }
}


zoals je ziet heb ik van de 2e regel in mijn functie een comment gemaakt, als ik deze comment weghaal dan krijg ik geen error, maar dan werkt mijn hele functie ook niet meer (oftewel: hij heeft false gereturned)

het gekke is dat als ik slechts de regel van overview = document.getElementById('overview') weghaal, de functie het ineens wel weer doet in IE (maar in Firefox niet).

Weet iemand wat er aan de hand kan zijn?

[ Voor 15% gewijzigd door Wizz15 op 27-05-2006 16:02 ]

PSN: RikBruil | BFBC2 stats


  • André
  • Registratie: Maart 2002
  • Laatst online: 20-02 09:23

André

Analytics dude

Is het document al helemaal geladen op het moment dat dit script uitgevoerd wordt? Want de enige reden dat dit fout kan gaan is als het element nog niet bestaat.

  • Wizz15
  • Registratie: Januari 2004
  • Laatst online: 26-10-2022
de functie wordt uitgevoerd bij window.onload, dus volgens mij zou het dan geladen moeten zijn toch?

Ik heb dit script ook al vaker gebruikt, alleen pakte hij dan niet alleen de regels van het element met id 'overview', maar gewoon alle rijen op de pagina, daar werkte het wel gewoon.

Het lijkt me dan ook sterk dat het script het niet zou doen omdat de pagina nog niet geladen zou zijn. (in firefox werkt hij nu ook gewoon, alleen IE geeft n probleem)

[ Voor 65% gewijzigd door Wizz15 op 27-05-2006 16:07 ]

PSN: RikBruil | BFBC2 stats


  • DLGandalf
  • Registratie: Maart 2005
  • Laatst online: 21-02 13:13
document.body.onload
??

  • Wizz15
  • Registratie: Januari 2004
  • Laatst online: 26-10-2022
Nee dit is de code:
JavaScript:
1
2
3
4
5
window.onload = pageInit;

function pageInit() {
    scanRows();
}


dit staat in een apart bestand, wat in <head> wordt geladen, maar wat dus pas uitgevoerd zou moeten worden op met moment dat de pagina geladen is

als ik window vervang door document.body krijg ik een error van IE dat document.body leeg is, of geen object

[ Voor 25% gewijzigd door Wizz15 op 27-05-2006 16:26 ]

PSN: RikBruil | BFBC2 stats


  • DLGandalf
  • Registratie: Maart 2005
  • Laatst online: 21-02 13:13
ja ok, maar probeer het is in je html bij de body tag onload="scanRows();" neer te zetten
als het dan nog niet werkt, weet je natuurlijk dat het niet hier aan ligt en kan je verder gaan kijken

  • Wizz15
  • Registratie: Januari 2004
  • Laatst online: 26-10-2022
Als ik het in mn body tag neerzet krijg ik nog steeds die error van mijn eerste post. Voor zover ik weet is window.onload ook gelijk aan onload in de body tag, maar dan unobtrusive.

PSN: RikBruil | BFBC2 stats


  • André
  • Registratie: Maart 2002
  • Laatst online: 20-02 09:23

André

Analytics dude

De verschillende manieren van onload aanroepen is iig niet je probleem. Ik vermoedt dat het nog ergens anders ligt, heb je een voorbeeld online staan?

  • Wizz15
  • Registratie: Januari 2004
  • Laatst online: 26-10-2022
Ik heb zojuist een voorbeeld online gezet op http://js.rikbruil.com/. Dit is niet de pagina waar ik het originele probleem mee heb, maar ik heb gewoon de javascript gekopieerd en een tabelletje gemaakt met id 'overview'. Het probleem bestaat nog steeds in IE.

de javascript file staat trouwens hier: http://js.rikbruil.com/js/javascript.js (scheelt weer kopieer en plak werk ;) )

PSN: RikBruil | BFBC2 stats


  • André
  • Registratie: Maart 2002
  • Laatst online: 20-02 09:23

André

Analytics dude

Haal in de functie pageInit() de () achter scanRows weg en je probleem is opgelost. Door die haakjes gaat hij de functie direct uitvoeren en niet pas na de onload.

  • Wizz15
  • Registratie: Januari 2004
  • Laatst online: 26-10-2022
Ik heb het net geprobeerd, maar op het moment dat ik de haakjes weghaal voert hij de functie helemaal niet meer uit, volgens mij behandelt ie t dan als een variabele in plaats van een functie

(is het trouwens niet zo dat de functie pageInit pas wordt uitgevoerd nadat de pagina geladen is, en dus ook de functies die binnen pageInit() zitten?:P)

[ Voor 30% gewijzigd door Wizz15 op 27-05-2006 22:08 ]

PSN: RikBruil | BFBC2 stats


  • Scott
  • Registratie: December 2004
  • Laatst online: 18-02 06:32

Scott

Ik ben, dus ik tweak

Heb ik laatst ook gehad. Oplossing was heel simpel, zet er var voor:


JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
function scanRows() {
    if( !document.getElementById ) return false;
    //if( !document.getElementById('overview') ) return false;

    var overview = document.getElementById('overview');

    table_rows = overview.getElementsByTagName('tr');

    for( i = 0; i < table_rows.length; i++ ) {
        if( i % 2 != 0 )
            table_rows[i].className = "row_light";
    }
}

[ Voor 7% gewijzigd door Scott op 27-05-2006 22:08 ]


  • Wizz15
  • Registratie: Januari 2004
  • Laatst online: 26-10-2022
aah bedankt :D

in mijn andere scripts had ik dat inderdaad wel gedaan, maar bij deze niet aan gedacht :P

bedankt iig :D

PSN: RikBruil | BFBC2 stats


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 01:18

crisp

Devver

Pixelated

Inderdaad; door je variabele te declareren declareer je 'm in local scope ipv in global scope. Dat laatste veroorzaakt een probleem in IE doordat MS in al z'n (on)wijsheid vast wil houden aan backwards-compatibility met het zwaar verouderde en nutteloze document.all object model waarbij elementen met een name of ID attribuut ook deel uitmaken van de global namespace. In feite overschrijf je gewoon de referentie naar dat object.

Intentionally left blank


  • André
  • Registratie: Maart 2002
  • Laatst online: 20-02 09:23

André

Analytics dude

Wizz15 schreef op zaterdag 27 mei 2006 @ 22:02:
Ik heb het net geprobeerd, maar op het moment dat ik de haakjes weghaal voert hij de functie helemaal niet meer uit, volgens mij behandelt ie t dan als een variabele in plaats van een functie

(is het trouwens niet zo dat de functie pageInit pas wordt uitgevoerd nadat de pagina geladen is, en dus ook de functies die binnen pageInit() zitten?:P)
Ja helemaal gelijk in, was er niet helemaal bij die vorige reactie. Ik zie nu ook dat het met hetgeen te maken heeft wat crisp beschrijft.
Pagina: 1