Javascript, räkna ut tabell i specifik tabell och kolumn

Permalänk
Medlem

Javascript, räkna ut tabell i specifik tabell och kolumn

Blivit tokig på det här problemet, jag har läst flera programmeringskurser men blir aldrig riktigt fullärd men hittar inget på google, suttit två hela dagar och försökt komma på hur jag ska göra.

Jag vill kunna ta första värdet från pris * antal 1 = summa och fortsätta så hela vägen ner, loop kanske är lämpligt men har ingen aning hur jag ska konstruera den.

Summera alla antal kolumnen och lägga underst och ska fungera även fast man ta bort eller lägger till antal
Jag har hittat kod för att räkna ut totalsumman på både antal och pris som ni kan se i koden, men resten kvarstår hur jag ska göra.
Här är koden: http://jsfiddle.net/Y2jdn/10/

Edit: Kör koden i netbeans på mac, men tar gärna emot tips om det finns bättre program att koda i javascript tillsammans med CSS och HTML.

Permalänk
Medlem

Halloj!

Din javascript kod kallar inte på init funktionen (i jsfiddle), ändra rad 69 från window.onload = init; till window.onload = init();

Permalänk
Medlem

@ferrell: tack, såg inte det felet

Permalänk
Medlem

Ingen som kan hjälpa en att visa hur man ska tänka?

Permalänk
Medlem
Visa signatur

I'm Winston Wolfe. I solve problems.

Permalänk
Medlem

@matti4s: jag hade aldrig kommit på det där själv, tacksam för hjälpen

Permalänk
Medlem

@matti4s:Dock tänker jag hur gör jag om jag ska addera antal?
cells[cells.length - 2].children[0].value = nrOfItems + nrOfItems //borde nästan vara så
table.tBodies[0].rows[i].cells[cells.length - 2].children[0].value = sum

Permalänk
Medlem

Går det att göra det här kortare med en loop, den ska loopa även fast man tar bort eller lägger till värden? : http://jsfiddle.net/Y2jdn/21/

var antal = 0;
var antal1 = 0;
var antal2 = 0;
var antal3 = 0;
var antal4 = 0;
var antal5 = 0;

var inputs = document.getElementsByTagName("input")[0].value;
var inputs1 = document.getElementsByTagName("input")[1].value;
var inputs2 = document.getElementsByTagName("input")[2].value;
var inputs3 = document.getElementsByTagName("input")[3].value;
var inputs4 = document.getElementsByTagName("input")[4].value;
var inputs5 = document.getElementsByTagName("input")[5].value;

antal = parseInt(inputs);
antal1 = parseInt(inputs1);
antal2 = parseInt(inputs2);
antal3 = parseInt(inputs3);
antal4 = parseInt(inputs4);
antal5 = parseInt(inputs5);
var totalAntal=antal+antal1+antal2+antal3+antal4+antal5

table.tBodies[0].rows[i].cells[cells.length - 2].innerHTML = totalAntal

Permalänk
Medlem
Skrivet av Forbizzn:

Går det att göra det här kortare med en loop, den ska loopa även fast man tar bort eller lägger till värden? : http://jsfiddle.net/Y2jdn/21/

var antal = 0;
var antal1 = 0;
var antal2 = 0;
var antal3 = 0;
var antal4 = 0;
var antal5 = 0;

var inputs = document.getElementsByTagName("input")[0].value;
var inputs1 = document.getElementsByTagName("input")[1].value;
var inputs2 = document.getElementsByTagName("input")[2].value;
var inputs3 = document.getElementsByTagName("input")[3].value;
var inputs4 = document.getElementsByTagName("input")[4].value;
var inputs5 = document.getElementsByTagName("input")[5].value;

antal = parseInt(inputs);
antal1 = parseInt(inputs1);
antal2 = parseInt(inputs2);
antal3 = parseInt(inputs3);
antal4 = parseInt(inputs4);
antal5 = parseInt(inputs5);
var totalAntal=antal+antal1+antal2+antal3+antal4+antal5

table.tBodies[0].rows[i].cells[cells.length - 2].innerHTML = totalAntal

Hej,
I din fiddle så kan du byta ut din count()-funktion mot denna:

function count() { var sum = 0, totalNrOfItems = 0; for (var i = 0; i < table.tBodies[0].rows.length - 1; i++) { var cells = table.tBodies[0].rows[i].cells; var nrOfItems = parseInt(cells[cells.length - 2].children[0].value); var price = parseInt(cells[cells.length - 3].innerHTML); cells[cells.length - 1].innerHTML = price * nrOfItems; sum += nrOfItems * price; totalNrOfItems += nrOfItems; } table.tBodies[0].rows[i].cells[cells.length - 1].innerHTML = sum; table.tBodies[0].rows[i].cells[cells.length - 2].innerHTML = totalNrOfItems; }

Kommer sätta näst sista cellen till totalt antal items.
Var det så du menade?

MVH Freezer

Visa signatur

5900x ][ MSI B550 Tomahawk ][ 32 GB@3200C14 ][ Asus 3060ti ][ Samsung 980Pro 1TB + 2x Crucial MX300 1TB ][ Corsair HX1000i ][ Corsair 400Q ][ Asus MG278Q ][ Noctua NH-U12A

Permalänk
Medlem
Skrivet av Freezer:

Hej,
I din fiddle så kan du byta ut din count()-funktion mot denna:

function count() { var sum = 0, totalNrOfItems = 0; for (var i = 0; i < table.tBodies[0].rows.length - 1; i++) { var cells = table.tBodies[0].rows[i].cells; var nrOfItems = parseInt(cells[cells.length - 2].children[0].value); var price = parseInt(cells[cells.length - 3].innerHTML); cells[cells.length - 1].innerHTML = price * nrOfItems; sum += nrOfItems * price; totalNrOfItems += nrOfItems; } table.tBodies[0].rows[i].cells[cells.length - 1].innerHTML = sum; table.tBodies[0].rows[i].cells[cells.length - 2].innerHTML = totalNrOfItems; }

Kommer sätta näst sista cellen till totalt antal items.
Var det så du menade?

MVH Freezer

Jo delvis, dock behöver den fungerar även om produkter läggs till eller tas bort fran tabellen, som jag inte vet riktigt hur jag ska lösa. Jag försökte med if-satser men tar för långt tid att gå igenom varje antal-cell.

Permalänk
Medlem

@Forbizzn: Du har inte funderat på att använda <tfoot> att lägga summeringen i istället så kan du bara loopa igenom tbody rows? Borde gå att lägga till och ta bort rows där då.

MVH Freezer

Visa signatur

5900x ][ MSI B550 Tomahawk ][ 32 GB@3200C14 ][ Asus 3060ti ][ Samsung 980Pro 1TB + 2x Crucial MX300 1TB ][ Corsair HX1000i ][ Corsair 400Q ][ Asus MG278Q ][ Noctua NH-U12A

Permalänk
Medlem
Skrivet av Freezer:

@Forbizzn: Du har inte funderat på att använda <tfoot> att lägga summeringen i istället så kan du bara loopa igenom tbody rows? Borde gå att lägga till och ta bort rows där då.

MVH Freezer

Jag ska inte lägga till eller ta bort rows, jag ska kunna lägga till eller ta bort antal utan att uträkningen påverkas, sorry om jag var otydlig.

Permalänk
Medlem

mitt tips är att lära dig AnguarJs eller liknande ramverk och komma bort från att manipulera dom:en

Permalänk
Medlem
Skrivet av WIRN:

mitt tips är att lära dig AnguarJs eller liknande ramverk och komma bort från att manipulera dom:en

Jag läser min första javascript kurs och det är meningen att vi ska jobba i dom.

Permalänk
Medlem
Skrivet av Forbizzn:

Jag läser min första javascript kurs och det är meningen att vi ska jobba i dom.

Skicka läraren på Angular-kurs då

Permalänk
Medlem

Hej! Förstår inte en grej, har fått till det egentligen men funkar inte i language javascript 1.7 vilket man kan se här: http://jsfiddle.net/Y2jdn/32/
men i language javascript funkar koden som den ska, förstår inte vad det är som jag har missat, jättetacksam för en bättre förståelse.

Permalänk
Medlem
Skrivet av ferrell:

Halloj!

Din javascript kod kallar inte på init funktionen (i jsfiddle), ändra rad 69 från window.onload = init; till window.onload = init();

Detta är helt fel, om man lägger till parenteser så körs funktionen där och det är returvärdet som tilldelas till window.onload. Med andra ord körs funktionen direkt, eventuellt långt innan window.onload körs.

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Medlem
Skrivet av Teknocide:

Detta är helt fel, om man lägger till parenteser så körs funktionen där och det är returvärdet som tilldelas till window.onload. Med andra ord körs funktionen direkt, eventuellt långt innan window.onload körs.

Blev ett "bra inlägg" på detta. Tack. I JsFiddle så tror (kan inte kolla just nu) jag att javascripten redan är wrappad runt window.onload. Vilket innebär att man kan ha sin kod som window.onload = function; på sin hemsida, men i JsFiddle bör det räcka med en funtion(); i slutet av sin javascriptkod.

Rätta mig gärna igen om jag har fel.