20. juni 2007 - 20:11Der er
14 kommentarer og 1 løsning
Firefox - Has no properties
Ved klik på en bestemt celle kalder jeg en javascript metode. Når metoden bliver kaldt bliver en celle i en row erstattet med en ny celle. Den gamle celle er tilknyttet row. Den tabelstruktur jeg ønsker, at ændre, er tidligere blevet oprettet dynamisk i javascript.
pseudo kode for metodeindhold: var row = document.getElementsByName('row'); var oldcell = document.getElementsByName('oldcell'); var specRow = row[0]; var newCell = document.createElement('td'); specRow.replaceChild(newcell,oldcell[0]);
Det virker fint i Internet Explorer 7, men ikke i firefox. Firefox giver følgende svar: specRow has no properties.
Ok - getElementsByName returnere 0 items derfor "has no properties". Hvis jeg bruger document.getElementByID i en forsimplet udgave virker det. Så spørgsmålet er bare hvad der er galt siden getElementsByName ikke virker.
gad vide om det er fordi du bruger nogle MS-udtryk i stedet for standard DOM ting et eller andet sted ? F.eks. parentNode har en non-standard ækvivalent (som jeg ikke lige kan huske) som virker i IE, og man bliver så overrumplet over, at det ikke virker andre steder.
Jeg ved blot at jeg selv en gang blev fanget i noget MS-crap, som viste sig ikke at være standard. Du kunne vel visuelt checke din kode op imod nogle specs.
Nej ok ... ikke fejle men returnere et domelement uden properties. document.getElementByID('oldcell') retunere et rigtigt domelement som jeg fint kan kalde properties på. document.getElementsByName('oldcell') burde returnere 6 men returnere 0. Det kan selvfølgelig være mozilla's implementation af getElementsByName fejler undervejs fordi strukturen ikke er rigtig og derfor retunere 0. GetElementByID finder jo bare et element ud af de 6. Det må komme an på en prøve. Jeg prøver lige at sætte unikke id'er på alle 6 elementer. Bagefter prøver jeg getElementByID på hver af de 6 elementer. Så burde getElementByID fejle ved mindst 1 af elementerne hvis dom strukturen er forkert right?
dit ræsonnement lyder rigtigt i mine ører. Det vil så bevise at strukturen er OK. Spørgsmålet er så om MS har en anden måde at anskue NAME på end Mozilla, og/eller om de to har en eller anden lille syntaktisk diff i måden hvorpå man tilskriver NAME til elementerne.
getElementByID fejler ikke ved alle 6 elementer ....... finder fint getElementByID('oldcell1') ect. getElementsByName('oldcell1') ect. stadig 0 Så det må betyde, at fejlen ligger efter de 6 elementer eller, at der er noget galt med deres funktion. Det må være nok for idag. Gal jeg er træt af Firefox, IE og andre. Hvorfor kan de ikke bare bruge samme standarder eller sørge for, at deres #¤%& understøtter standarderne?! :)
Lyder fornuftigt (at sove og at bande) :) Måske kommer løsningen til dig i morgen.
Det jeg selv plejer at gøre i sådanne situationer, hvis jeg ikke kan få det til at virke efter at ha sovet på det, er simpelthen at hitte på en anden måde at løse opgaven, uden brug af de kriminelle bestanddele:)
Jeg bruger en C# -> Javascript compiler. Det Javascript, compileren producere, er nu meget rent og understøtter såvidt jeg kan se standarderne. Indledningsvis var der selvforskyldte fejl, idet C# tager udgangspunkt i IE's implementering af DOM og Javascript. Derfor faldt jeg i nogle gange, men fandt hurtigt fejlene, idet firefox slet ikke understøttede metoderne. Det er bare ikke tilfældet her, derfor lidt forvirring. Jeg har en mindre pæn løsning i baghånden, men er bare lidt stædig. ;) Det hele bliver heller ikke bedre af, at jeg p.t inkludere min javascript kode i en asp.net side. :) God nat.
groop >> Prøv at lægge et link til et eksempel. Det lyder, somom du laver en fejl et andet sted. Der er iøvrigt næppe en browser med så elendig og ustandardiseret et DOM-lag som FF ... så det kan være svært at gætte, hvor fejlen er - og hvilken browser, der opfører sig korrekt uden mere kode =)
Der er ikke noget, der hedder getElementByID! Det hedder getElementById. Meget stor forskel! Umiddelbart tror jeg ikke, dine problemer skyldes, at browserne er gal på den og ikke understøtter standarderne ;o)
neoman : 21/06-2007 01:29:35 Bingo ! :) Lidt søvn og vinket med vognstangen virkede. Jeg tilføjede en name attribut og nu virker getElementsByName også i firefox. Det lader til, at IE sætter name = id såfremt name ikke er angivet. Så læg et svar og du får dine velfortjente point.
olebole : getElementByID = slåfejl (copy paste når det er bedst - fra tidligere indlæg :) ). Hvis nu IE ikke satte name = id, så ville getElementsByName heller ikke have fungeret i IE. Så ville det eneste indlysende være, at tilføje en name attribut og tildele attributten en værdi for derefter, at tilføje den til cellen. Standarder er gode når det gælder browserfortolkning sålænge udviklerne følger dem nøje.
"Standarder er gode når det gælder browserfortolkning sålænge udviklerne følger dem nøje."
- det er en tatovering, jeg vil overveje at få udført. Ordene burde stå mejslet i hveranden flise på de københavnske fortorve - og hænge som guld-guirlande omkring Rådhustårnet! ;o)
Hehe :P ;) Jeg mente de udviklere der står for, at udvikle browserne (i dette tilfælde microsoft's folk). Det gælder selvfølgelig også for os andre engle. Held og lykke med tatoveringen. Hvis der bliver indsamling skal jeg gerne være den første med et bidrag. Over and out.
Synes godt om
Ny brugerNybegynder
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.