30. november 2008 - 14:21
Der er
38 kommentarer og 2 løsninger
getElementById i Internet Explorer
Hej eksperter.
Jeg har et problem med et lille script, der vil opdatere prisen i realtime gennem javascript.
På denne side kan i se min HTML del
http://websimple.dk/dev/index.php?p=bestil Og her ligger mit JS.
http://websimple.dk/dev/js/pris.js Det virker fint i Firefox, men af en eller grund virker det ikke i Internet Explorer (tak bill)
Annonceindlæg fra Infor
30. november 2008 - 15:15
#1
<ole> Det skyldes Firefox's yderst sloppy forhold til valid DOM-kode. Dette: document.getElementById("totalPris").innerHTML=totalPrisText; document.getElementById("totalMoms").innerHTML=totalMomsText; document.getElementById("totalPrisMoms").innerHTML=totalPrisMomsText; - bør være: document.getElementById("totalPris").value=totalPrisText; document.getElementById("totalMoms").value=totalMomsText; document.getElementById("totalPrisMoms").value=totalPrisMomsText; Property'en innerHTML har en masse uhensigtsmæssige sideeffekter, ligesom den aldrig har været valid i forhold til nogen somhelst standard. Siden Explorer 5 og Netscape 6 har der eksisteret langt bedre og valide metoder til at manipulere DOM'en med, så der er ingen grund til at bruge invalide, antikke metoder. Undgå innerHTML ;o) Jeg fatter dog ikke, hvordan FF kan finde på at godtage innerHTML til at sætte en value på et input-element, er dog en gåde ... det giver ikke mening. =) /mvh </bole>
30. november 2008 - 15:29
#2
Hej Ole. Jeg tror du har misforstået mit script en smule. Der hvor jeg sætter innerHTML skriver jeg til en label med et id. Jeg benytter altså ikke et input felt.
30. november 2008 - 16:52
#3
det lykkedes da for ham at prædike imod innerHTML ;-)
30. november 2008 - 16:58
#4
Når det er et label-element, skal det ikke være .value, men .firstChild.nodeValue
30. november 2008 - 17:09
#5
w13 - Det virker ikke. Jeg tror problemet ligger i getElementById - prøv at se den fejl man får af Internet Explorer.
Slettet bruger
30. november 2008 - 17:15
#6
Det ser ud til at du har lidt for mange parenteser i din if-sætning. if((document.getElementById("nyhedssystem").checked)){ Skal være if(document.getElementById("nyhedssystem").checked){ Jeg ved ikke kom
Slettet bruger
30. november 2008 - 17:16
#7
Hov... Jeg ved ikke om det gør forskellen ;)
30. november 2008 - 17:25
#8
Nej, jeg gik heller ikke ud fra, det ville virke, når innerHTML heller ikke virkede - men firstChild.nodeValue er den gyldige DOM-metode til indsættelse af tekst. Value ville under ingen omstændigheder kunne virke, når det ikke drejer sig om et input-felt. kaloer>> Nej, den ekstra parentes gør ingen forskel, men der er selvfølgelig heller ingen grund til, at den skal være der.
30. november 2008 - 17:26
#9
www.denn.dk>> Jeg bruger i øvrigt Mac, så derfor kan jeg ikke se fejlen i Internet Explorer. Har du mulighed for at skrive den her?
30. november 2008 - 17:27
#10
(firstChild.nodeValue virker i øvrigt kun, hvis der står noget i feltet først, så det kan f.eks. enten være 0 eller - sidstnævnte vil ikke kunne ses.)
30. november 2008 - 17:28
#11
Får følgende: Linje: 17 Tegn: 3 Fejl: Objektet understøttet ikke denne egenskab eller metode.
30. november 2008 - 17:29
#12
grundPris=2000; bør i øvrigt være: var grundPris=2000;
30. november 2008 - 17:30
#13
Hvilket dokument står der, fejlen sker i? PHP-filen eller JS-filen? (Der plejer at stå en adresse under det, du skriver.)
30. november 2008 - 17:31
#14
w13 - ændret nu, men det virker stadigvæk ikke.
30. november 2008 - 17:31
#15
30. november 2008 - 17:36
#16
Du bør nok også erklære dine andre variabler. Ret: var grundPris=2000; til: var grundPris=2000; var nyhedsSystem = nyhedsBrev = galleri = kontaktFormular = opdateringer = 0; var totalPrisB = totalPrisMomsB = totalPrisText = totalMomsText = totalPrisMomsText = 0;
30. november 2008 - 17:37
#17
Så kan du også slette alle dine else-sætninger.
30. november 2008 - 17:46
#18
Jeg ville nok gøre noget i retning af: function beregnpris() { var totalPris = 2000; var totalPrisText = totalMomsText = totalPrisMomsText = ""; var totalMoms = 0; if (document.getElementById("nyhedssystem").checked) { totalPris += 1499; } if (document.getElementById("nyhedsbrev").checked) { totalPris += 799; } if (document.getElementById("galleri").checked) { totalPris += 1499; } if (document.getElementById("kontaktformular").checked) { totalPris += 799; } if (document.getElementById("opdateringer").checked) { totalPris += 499; } totalMoms = totalPris*0.25; totalPrisText = totalPris.replace("/./",",") + " kr"; totalMomsText = totalMoms.replace(".",",") + " kr"; totalPrisMomsText = totalPris+totalMoms; totalPrisMomsText = totalPrisMomsText.replace(".",",") + " kr"; document.getElementById("totalPris").firstChild.nodeValue = totalPrisText; document.getElementById("totalMoms").firstChild.nodeValue = totalMomsText; document.getElementById("totalPrisMoms").firstChild.nodeValue = totalPrisMomsText; } Bemærk, at jeg her bruger firstChild.nodeValue, hvilket som sagt kræver, at du indsætter f.eks. "0" eller " " i både din totalPris-label, din totalMoms-label og din totalPrisMoms-label.
30. november 2008 - 17:47
#19
Sorry, der var jeg vist for hurtig - men det er nu lidt sørgeligt at erfare, at det, at jeg påpeger åbenlyse fejl og tåbeligheder ved en browser (omend, det ikke var, hvad der her forårsagede fejlen), stadig kan provokere visse primitive elementer til at føle sig kaldet til at bidrage med ligegyldigheder.
www.denn.dk >> Hvis du har et element med id="grundPris", vil du på grund af en bug i IE kunne adressere elementet med grundPris. grundPris=0 opfattes altså som forsøg på at sætte elementet lig med 0 - hvilket er vrøvl =)
Lokale variabler i funktioner bør altid erklæres med var ;o)
30. november 2008 - 18:15
#20
oleBole, det har jeg ikke. w13 - Tak for dine mere rene kode, men det virker desværre stadigvæk ikke.
30. november 2008 - 18:16
#21
- og det virker slet ikke i firefox nu
30. november 2008 - 18:22
#22
Hvad siger fejlkonsollen så i FF?
30. november 2008 - 18:38
#23
totalPris.replace is not a function [Break on this error] totalPrisText = totalPris.replace("/./",",") + " kr"; du skriver Regex inde i en string... nøjes i stedet med "."
30. november 2008 - 18:41
#24
i stedet for at bruge en <label> ville jeg nok bruge et <span> og derefter bruge innerHTML som ikke forvirre halvt så meget som firstChild().nodeValue keep it simple
30. november 2008 - 18:43
#25
evt ville jeg også præfix mine span-id'er med lbl: lblTotalPris lblTotalMoms
30. november 2008 - 18:44
#26
Jeg foretrækker personligt Keep it real. :) Men en span er nok mere fornuftigt semantisk set end en label.
30. november 2008 - 19:36
#27
Har rettet det iflg. jeres forslag, det virker stadigvæk ikke.
Får følgende fejl stadigvæk
Fejl: totalPris.replace is not a function
Kildefil:
http://websimple.dk/dev/js/pris.js Linje: 28
30. november 2008 - 19:44
#28
formegentlig fordi det er en INT prøv at konvertere den inden du laver replace: totalPris = (totalPris + "").replace...
30. november 2008 - 19:45
#29
eller... ikke INT.. men NUMBER
30. november 2008 - 20:08
#30
virker desværre hellere ikke.
Hvis du kigger på følgende side:
http://www.simpelside.dk/bestil_webloesning.php og kigger i hans javascript, så er det faktisk nødagtigt det samme som jeg gik udfra, før vi lavede ændringerne. Men hans virker i både Firefox og Internet Explorer
30. november 2008 - 20:14
#31
totalPrisMomsText er blevet til en NUMBER du skal (totalPrisMomsText + "") med den inden du kan bruge den som String
30. november 2008 - 20:16
#32
lidt regler at huske var p = "12" + 12 // giver "1212" var q = "12" * 12 // giver 144
30. november 2008 - 20:28
#33
Jeg er ikke helt med på hvad du vil, kan du evt. smide et lille kode snippet?
30. november 2008 - 20:34
#34
totalPris = (totalPris).replace... skal være: totalPris = (totalPris + "").replace... :)
30. november 2008 - 20:39
#35
Eller brug dine "kr" til at tvinge den til string: totalPrisText = (totalPris + " kr").replace(".",","); totalMomsText = (totalMoms + " kr").replace(".",","); totalPrisMomsText = totalPris+totalMoms; totalPrisMomsText = (totalPrisMomsText+" kr").replace(".",",");
30. november 2008 - 20:40
#36
w13 - Du er min redningsmand, smid et svar ;) Jeg opdagede lige, at onchange ikke fungere helt optimalt i Internet Explorer, men onclick virker uden problemer :)
30. november 2008 - 21:19
#37
Jeg bør nok dele med Montago, som foreslog løsningen, men her er et svar fra mig. =)
30. november 2008 - 21:35
#38
yoo
30. november 2008 - 22:05
#39
Forhøjede lige pointsne. Jeg takker mange gange. Javascript er ikke min bedste ven, endnu :)
30. november 2008 - 22:16
#40
Tak for points! :)
Vi tilbyder markedets bedste kurser inden for webudvikling