Avatar billede groop Nybegynder
20. juni 2007 - 20:11 Der 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.
Avatar billede groop Nybegynder
21. juni 2007 - 00:26 #1
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.
Avatar billede groop Nybegynder
21. juni 2007 - 00:39 #2
IE : document.getElementsByName returnere 6 items
firefox : document.getElementsByName returnere 0 items
Why????......
Avatar billede neoman Novice
21. juni 2007 - 00:45 #3
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.
Avatar billede groop Nybegynder
21. juni 2007 - 00:51 #4
Burde getElementByID så ikke også fejle?
Avatar billede neoman Novice
21. juni 2007 - 01:01 #5
Ikke selve kaldet vel, svjv er det standard.

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.
Avatar billede groop Nybegynder
21. juni 2007 - 01:21 #6
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?
Avatar billede neoman Novice
21. juni 2007 - 01:29 #7
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.
Avatar billede groop Nybegynder
21. juni 2007 - 01:38 #8
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?! :)
Avatar billede neoman Novice
21. juni 2007 - 01:43 #9
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:)

God nat.
Avatar billede groop Nybegynder
21. juni 2007 - 02:05 #10
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.
Avatar billede olebole Juniormester
21. juni 2007 - 15:53 #11
<ole>

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)

/mvh
</bole>
Avatar billede groop Nybegynder
21. juni 2007 - 17:36 #12
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.
Avatar billede neoman Novice
21. juni 2007 - 17:45 #13
fint det virkede - finally !:)
Avatar billede olebole Juniormester
22. juni 2007 - 13:17 #14
"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)
Avatar billede groop Nybegynder
22. juni 2007 - 23:38 #15
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.
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

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