WaborMedlem sedan aug. 200711 inlägg 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;*
Peter SMedlem sedan dec. 20025 483 inlägg Välkommen till wF!
Denna rad är, i sitt sammanhang, felaktigt skriven:
var summa = td3[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
WaborMedlem sedan aug. 200711 inlägg 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.*
Peter SMedlem sedan dec. 20025 483 inlägg 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;
WaborMedlem sedan aug. 200711 inlägg Tack för tipset. Det löste sig tillslut när jag började "leka" med alert() rutor. De är riktigt smidigt :)