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

Trädvy Permalänk
Medlem
Registrerad
Jun 2008

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.

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Feb 2011

Halloj!

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

Trädvy Permalänk
Medlem
Registrerad
Jun 2008

@ferrell: tack, såg inte det felet

Trädvy Permalänk
Medlem
Registrerad
Jun 2008

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

Trädvy Permalänk
Medlem
Plats
@home
Registrerad
Maj 2005

I'm Winston Wolfe. I solve problems.

Trädvy Permalänk
Medlem
Registrerad
Jun 2008

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

Trädvy Permalänk
Medlem
Registrerad
Jun 2008

@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

Trädvy Permalänk
Medlem
Registrerad
Jun 2008

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

Trädvy Permalänk
Medlem
Plats
Småland
Registrerad
Jan 2003
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

Intel i7 5820k @ 4,5 GHz ][ Kraken X62 ][ Asus X99-A ][ 32 GB Corsair ][ Sapphire RX480 4GB ][ SB X-fi Fatal1ty ][ Samsung 850Pro 512 GB ][ Corsair RM650 ][ Corsair 400Q ][ Asus MG278Q

Trädvy Permalänk
Medlem
Registrerad
Jun 2008
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.

Trädvy Permalänk
Medlem
Plats
Småland
Registrerad
Jan 2003

@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

Intel i7 5820k @ 4,5 GHz ][ Kraken X62 ][ Asus X99-A ][ 32 GB Corsair ][ Sapphire RX480 4GB ][ SB X-fi Fatal1ty ][ Samsung 850Pro 512 GB ][ Corsair RM650 ][ Corsair 400Q ][ Asus MG278Q

Trädvy Permalänk
Medlem
Registrerad
Jun 2008
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.

Trädvy Permalänk
Medlem
Plats
Cyberrymden
Registrerad
Okt 2003

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

Trädvy Permalänk
Medlem
Registrerad
Jun 2008
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.

Trädvy Permalänk
Medlem
Plats
Cyberrymden
Registrerad
Okt 2003
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å

Trädvy Permalänk
Medlem
Registrerad
Jun 2008

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.

Trädvy Permalänk
Medlem
Plats
i din garderob
Registrerad
Sep 2007
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.

Bilanaloger är som Volvo — varenda svenne kör med dem

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Feb 2011
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.