Avatar billede mickiii Nybegynder
08. oktober 2005 - 10:55 Der er 4 kommentarer

innerHTML i IE virker ikke, men fint i FF

Hej,

Jeg er ved at lave en lille kalender widget som opdateres via strenge sendt fra serveren:

Et eksempel på en streng:
spacer_start|6|a-day|1|a-day|2|a-day|3|a-day|4|a-day|5|a-day|6|a-day|7|a-day|8|a-day|9|a-day|10|a-day|11|a-day|12|a-day|13|a-day|14|a-day|15|a-day|16|a-day|17|a-day|18|a-day|19|a-day|20|a-day|21|a-day|22|a-day|23|a-day|24|a-day|25|a-day|26|a-day|27|a-day|28|a-day|29|a-day|30|a-day|31|a-desc|1|2005

Funktionen ser ud således:

function refreshCal(stream) {
  var t = stream.split("-");
  var ii = 1; 
 
  var html = '<tr>';
 
  for(var i = 0; i < t.length; i++) {
   
    d = t[i].split("|");

    switch(d[0]) {
        case 'spacer_start':
        html += "<td colspan="+d[1]+"></td>";
        ii = ii + (d[1]-1);
      break;
        case 'day':
        html += "<td>"+d[1]+"</td>";
        break;
        case 'spacer_end':
        html += "<td colspan="+d[1]+"></td>";
      break;
      case 'desc':
        $('cal_desc').innerHTML = d[1]+' - '+d[2];
          var c_month = parseInt(d[1]);
          var c_year = parseInt(d[2]);
          if(d[1] == 12) {
            var b_month = c_month-1;
            var b_year = c_year;
            var n_month = 1;
            var n_year = c_year+1;
          } else if (d[1] == 1) {
              var b_month = 12;
            var b_year = c_year-1;
            var n_month = c_month+1;
            var n_year = c_year;
          } else {
              var b_month = c_month-1;
            var b_year = c_year;
            var n_month = c_month+1;
            var n_year = c_year;
          }
          $('month_back').onclick = function(){cal_init(b_month,b_year);}
          $('month_forward').onclick = function(){cal_init(n_month,n_year);}
      break;
    }

    ii++;

    if(ii == 8) {
      html += "</tr><tr>";
      ii = 1;
    }
  }
alert(html);
$("cal").innerHTML = '';
$("cal").innerHTML = html;
}

Og min HTML således:

<table>
  <thead>
      <tr><td>S</td><td>M</td><td>T</td><td>O</td><td>T</td><td>F</td><td>L</td></tr>
  </thead>
  <tbody id="cal">
 
  </tbody>
</table>

Problemet er at den fungere fint i ie, og indsætter HTML strengen når den har parset strengen færdig, men i IE sker der tilsyneladende ikke noget. Den kommer ikke engang med en fejlmeddelelse.
Det skal lige siges at jeg har ligeledes forsøgt en funktion med ren generering af elementerne vha. createElement og appendChild, men det virker tilsyneladende heller ikke.

Selve $() funktionen er blot lig document.getElementById();

Jeg håber nogen kan hjælpe. Hvis noget af ovenstående er uklart eller skal forklares nærmere så spørg endelig.

Pft.
Avatar billede mickiii Nybegynder
08. oktober 2005 - 10:56 #1
Hov, der skulle self stå at den fungere fint i FF og IKKE i IE.
Avatar billede softspot Forsker
08. oktober 2005 - 12:06 #2
Du kan ikke ændre innerHTML på andet end en TD i en tabel (i IE).
Avatar billede roenving Novice
08. oktober 2005 - 15:11 #3
Jeg har altid kun forsøgt at gøre det med (html4-)DOM-bindings og appendChild, så det vil jeg da anbefale, at du gør !-)

-- og grunden til at jeg gik over til det, var netop problemet med, at alle browsere selv skaber tbody-elementet, hvis det ikke i forvejen er til stede, men Geckoerne indsatte elementer på det, selvom man adresserede tabellen, mens IE krævede, at man adresserede tbody direkte !o]

-- og jeg ville da ikke være overrasket, hvis $-tegnet i sig selv kunne skabe problemer !-)
Avatar billede olebole Juniormester
08. oktober 2005 - 19:57 #4
<ole>

innerHTML er - med overgangen til XHTML - så småt på vej ud og det varer forhåbentlig ikke mere end et par år, før den er historie.

Desuden er innerHTML ikke en synderlig velperformende måde at oprette og fylde indhold i elementer. I stedet bør du - som roenving skriver - bruge DOM.
Det er langt mere effektivt - og når man først bliver vandt til at arbejde med DOM, er det faktisk ikke spor mere besværligt. På mange måder, tværtimod.

- og som softspot skriver, så har du yderst begrænsede muligheder med innerHTML/tabeller i IE  :)

Dollar-tegnet betyder ikke noget under JS - men det kan i uheldige situationer skabe ged ved blanding af PHP- og JS-kode. PHP har desværre en temmelig sloppy strenghåndtering, der i dén grad sætter vand over til øretæver for den 'dovne' koder ... men ellers burde det ikke kunne skabe problemer  :)

/mvh
</bole>
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