webForumDet fria alternativet
Logga in / Bli medlem

Problem med summa beräkning i min varukorg

JavaScript

4 svar · 559 visningar · startad av Wabor

Medlem sedan aug. 200711 inlägg
Frågan#1

Hej! jag hoppas att det finns någon vänlig själ här som kan hjälpa mig. Jag håller på att göra en varukorg (en rätt så förenklad sådan) och har fastnad totalt. Det är så att jag hämtar/cloneNode en produkt (produktnamn, produktnummer, produkt pris) från en tabell och sätter in dem i min tabell varukorg genom att jag trycker på en länk "Lägg till produkt" min varukorg ska då uppdatera summan från 0 till så mycket som nu finns i korgen.

Jag tycker det bör räcka med att skriva något liknande, men får som svar att sum är NaN (Not a number), någon som vet vad jag gör för fel? och hur man rättar till det? Väldigt tacksam för svar.

//Varukorgens id
var b = document.getElementById("basketitems");
//Kolumnen som jag har överfört produktens pris till
var td3 = b.getElementsByTagName("td3");
for (var i=0; i<td3.length; i++)
{
var summa = td3*.childNode[0].nodeValue;
}
//Själva summan
var sum = parseInt(document.getElementById("sum").firstChild.nodeValue) + parseInt(summa);
document.getElementById("sum").firstChild.nodeValue = sum;*

Medlem sedan dec. 20025 483 inlägg
#2

Välkommen till wF!

Denna rad är, i sitt sammanhang, felaktigt skriven:

var summa = td3&#91;i].childNode[0].nodeValue;

Du skapar en för for-loopen lokal variabel i varje iteration. Detta är fel av två orsaker: För det första blir summa ickerefererbar utanför loopen. För det andra skrivs innehållet i variabeln över i varje iteration. Den första orsaken gör att du t.ex. inte kan skriva så här:

var sum = parseInt(document.getElementById("sum").firstChild.nodeValue) + parseInt(summa);

Du vill troligtvis i stället skriva

var summa = 0;
for (var i=0; i<td3.length; i++)
{
  summa += td3[i].childNode[0].nodeValue; 
}

//Sedan kan du säga parseInt(summa) om td3[i].childNode[0].nodeValue innehåller numeriska värden
Medlem sedan aug. 200711 inlägg
#3

Tack för svaret, tror jag förstår problemet. Har ändrat i min kod så den nu ser ut så här:

var basket = document.getElementById("basketitems");
var td3 = basket.getElementsByTagName("td3");
var summa =0;
var sum = parseInt(document.getElementById("sum").firstChild.nodevalue);
for (var i=0; i<td3.length; i++)
{
sum += parseInt(td3*.childNodes[0].nodeValue);
}
document.getElementById("sum").firstChild.nodeValue = sum;

Tycker nu att den verkar vara korrekt men när jag kör hela min kod får jag svaret NaN, men det är ju siffror i kolumnen jag försöker hämta från (om de nu lagts till som de ska då jag klonat dit dem, men det verkar de ha gjort för jag kan se dem i tabellen) så jag vet inte alls vad felet är.*

Medlem sedan dec. 20025 483 inlägg
#4

Testa att lägga en alert()s för att säkerställa att värdena är vad du tror:

var basket = document.getElementById("basketitems");
var td3 = basket.getElementsByTagName("td3");
var summa =0;
var sum = parseInt(document.getElementById("sum").firstChild.nodevalue);
alert("Pre loop: " + document.getElementById("sum").firstChild.nodevalue)
for (var i=0; i<td3.length; i++)
{
 if (isNaN(td3[i].childNodes[0].nodeValue)){
  alert(td3[i].childNodes[0].nodeValue + " is not a number")
 } else {
  sum += parseInt(td3[i].childNodes[0].nodeValue);
 }
}
document.getElementById("sum").firstChild.nodeValue = sum;
Medlem sedan aug. 200711 inlägg
#5

Tack för tipset. Det löste sig tillslut när jag började "leka" med alert() rutor. De är riktigt smidigt :)

264 ms totalt · 4 externa anrop · v20260731065814-full.05830320
121 ms — deklarationer (db)
0 ms — hämta statistik (cache)
138 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)