[JS] Functie werkt niet in IE zonder extra alert()

Pagina: 1
Acties:

  • Mafioso
  • Registratie: November 2000
  • Laatst online: 10:35
Ik had een klein javascript geschreven, om 2 tabelen zonder fixed-width colums even breed te maken.

Een voorbeeld staat hier : http://bl-tyrone.student.utwente.nl/games/
In Firefox werkt het script prima, maar in Internet Explorer doet hij een beetje raar.

In eerste instantie leek het allemaal prima te werken, maar toen ik wat alerts weg haalde (die er voor debug stonden), werkte het alleen in IE niet meer :(

Screenshotje:
Afbeeldingslocatie: http://bl-tyrone.student.utwente.nl/~mafioso/meuk/jsalertgedrag.gif

Dit is de functie :
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function fixWidth(sid,aCols) {
    for (i=0;i<aCols.length;i++) {
        
        var tname = aCols[i] + '_' + sid + '_h';
        var sname = aCols[i] + '_' + sid;
        
        var target = document.getElementById(tname);
        var source = document.getElementById(sname);
        
        // als het volgende niet gecomment is werkt het prima :?
        //alert ('foo');
    
        if (target && source)
            target.style.width = (source.offsetWidth - 2) + 'px';
        
    }
}


zo wordt het aangeroepen:
HTML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<div class="bar">rules</div>
<table>
    <tr><th class="col1" id="col1_0_h">var</th><th class="col2">val</th></tr>
</table>
<div class="rules">
    <table>
        <tr><td class="col1" id="col1_0">_tutor_bomb_viewable_check_interval</td><td class="col2">0.5</td></tr>
        <tr><td class="col1">_tutor_debug_level</td><td class="col2">0</td></tr>
        <tr><td class="col1">_tutor_examine_time</td><td class="col2">0.5</td></tr>
        <tr><td class="col1">_tutor_hint_interval_time</td><td class="col2">10.0</td></tr>
        <!-- knipper de knip -->
    </table>
</div>

<script>
var cols = new Array();
cols[0] = 'col1';
cols[1] = 'col2';
cols[2] = 'col3';
fixWidth(0,cols);
</script>


Deze code zal wel niet de meeste ideale manier zijn om te bereiken wat ik hier graag wil doen, maar het werkt al bijna.

Ik heb echt al vanalles geprobeerd om het ook werken te krijgen in IE, zo heb ik verschillende dingen laten returnen, en de functie op een andere manier aangeroepen. Dit heeft echter allemaal niet mogen baten.

Ik vind het alleen zo heel erg vreemd, dat als ik de // voor alert('foo'); weg haal het gewoon werkt (met irritante alerts weliswaar).

Kan iemand mij misschien vertellen waar dit vreemde gedrag zich voordoet?

Verwijderd

Het lijkt me een probleem waarbij de javascript wordt aangeroepen voordat de andere dingen geladen zijn. Probeer eens om die functie fixWidth aan te roepen na een korte tijdsduur?

setTimeout('fixWidth(0,cols);', 1000 );

  • Mafioso
  • Registratie: November 2000
  • Laatst online: 10:35
Verwijderd schreef op zaterdag 05 februari 2005 @ 12:59:
Het lijkt me een probleem waarbij de javascript wordt aangeroepen voordat de andere dingen geladen zijn.
Je hebt helemaal gelijk, txh!. Heb dat met die timer geprobeerd, en dat werkt prima. Ook nog even in <body onload=".."> gezet, dat werkt perfect. Nu alleen nog een manier vinden om dit wat tactischer aan te pakken, omdat ik hier werk met een template engine werk, en ik nog niet van te voren kan bepalen hoevaak die functie aangeroepen moet worden, maar daar kom ik wel uit.

Het is me nu iig duidelijk dat het waarschijnlijk dus komt doordat de pagina nog niet helemaal geladen is. Toch zou je denken dat als hij die alert() uit voert, dat de pagina ook nog niet helemaal geladen is, omdat hij dan pas het eerste vak 'getekend' heeft.

  • Koeniepoenie
  • Registratie: Oktober 2003
  • Laatst online: 13-05 15:24
Als je hem in de onload aanroept, is de timeout nutteloos lijkt mij..

Parse error: syntax error, unexpected GOT_USER in https://gathering.tweakers.net on line 1337


  • Mafioso
  • Registratie: November 2000
  • Laatst online: 10:35
Ja dat klopt, maarom haalde ik de timeout ook weg. Ik vind onload toch iets mooier als met een timeout, anders weet je nog niet of alles wel geladen is of niet, toch?