Avatar billede fidius Nybegynder
25. november 2007 - 20:00 Der er 9 kommentarer og
1 løsning

DOM, css class og ie7

hej,
jeg sidder lige og leger rundt med en side jeg arbejder med der trækker utroligt meget Ajax og finder så ud af at det ikke virker rigtigt i IE7, men firefox klare det flot... Det er tilsyneladende class' ie ikke kan håndtere rigtigt... Når du opretter f.eks. et div elementer med dom og smider en css class på elementer, så får ie7 ikke stylet elementet efter des class, hvilket er irriterende da det virker med id's.
Hvorfor laver ie7 sådan en latterlig fejl, er der andre af sådan nogen fejl man bare _skal_ kende, og nok det vigtigste; er der nogen møde at løse problemet på?
Avatar billede erikjacobsen Ekspert
25. november 2007 - 20:03 #1
Avatar billede w13 Novice
25. november 2007 - 20:04 #2
IE kræver className i stedet for class. Ved ikke, om den også virker i andre browsere, så du kan nøjes med den.
Avatar billede w13 Novice
25. november 2007 - 20:09 #3
Dvs. du kan selvfølgelig stadig skrive:
<div class="noget" ...></div>
i HTML, men DOM kræver vist:
document.getElementById("div").className("noget");
Du kan vist også gøre det mere rigtigt med:
document.getElementById("div").setAttribute("className","noget");
Avatar billede jhe-ting Nybegynder
25. november 2007 - 21:57 #4
Jeg har prøvet denne funktion som ser ud til at virke:

function setClassName(obj, strClass){      // Neither harms the other
    obj.setAttribute("class",strClass);    // FF + ?
    obj.setAttribute("className",strClass); // IE + ?
}
Avatar billede w13 Novice
25. november 2007 - 22:03 #5
Ja, det ser rigtigt ud. =)
Avatar billede jhe-ting Nybegynder
25. november 2007 - 22:24 #6
Der er en del andre forskelle; en ret vigtig er måden at indsætte en envent-handler:

function catchEvent(objElm, strEvent, pFunction){
    /**/
    if (objElm.addEventListener){ // FF
        //dbgDumpStr("FF: addEventListener", dbgOut);
        objElm.addEventListener(strEvent, pFunction, false);
    } else if (objElm.attachEvent){ // IE
        //dbgDumpStr("IE: attachEvent", dbgOut);
        objElm.attachEvent("on"+strEvent, pFunction);
    } else { // IE can do this, maybe some XYZbrowser has none of the above.
    /**/
        //dbgDumpStr("XX: elm.[on"+strEvent+"]", dbgOut);
        objElm["on"+strEvent] = pFunction;
        objElm[strEvent] = pFunction;
    }
}
Avatar billede jhe-ting Nybegynder
25. november 2007 - 22:27 #7
- samt måden en eventhandler bliver kaldt; se denne key-handler:

function keyHandler(evt){
    var elm, key, nxtCel;
    evt = evt?evt:event;
    evt.returnValue = true;
    key = evt.keyCode;
   
    switch (key) {
      case
            :
            :
    }
}
Avatar billede jhe-ting Nybegynder
25. november 2007 - 22:34 #8
Browser-kompabilitet er et svært spørgsmål, men som mine eksempler viser går jeg ind for 'feature-detction' fremfor 'browser-detection'.
Ikke alle browsere er ærlige med at navngive sig selv ( IE kalder sig "mozilla" ;) så selv om der _ER_ en variabel man kan teste, er det sikrere (funktionelt bedre) at undersøge forskellige måder at klare det på, og have en graciøs måde at håndtere manglende faciliteter. (F.eks. gmail findes i std og ajax.)
Avatar billede roenving Novice
26. november 2007 - 16:35 #9
>>jhe-ting 25/11-2007 22:24:27

-- og det skal tilføjes, at add/removeEventListener er den officielle standard beskrevet i w3cs DOM-binding, og altså ikke kun dækker FireFox/Mozilla !-)

-- og en helt anden tilføjelse går på, at man _aldrig_ må tilføje events til elementer, som ikke fysisk er indsat i dokumentet, da IE så opretter dobbelte udgaver, hvilket kan generere endog _meget_ grimme memory-leaks ,-(
Avatar billede fidius Nybegynder
27. november 2007 - 18:48 #10
Mange tak alle sammen:)
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