Wie kriege ich ne Summe in js aus Textfeld

Hi,
wenns interessiert. Ich habs gelöst. Kleiner Haken war noch die variable Anzahl von Positionen. Daher hatte ich keine festen Variablennamen und musste diese erst generieren.

function Gesamt(anzahlpos)
{
var wirdberechnet=„wird berechnet …“;
gesamtsumme_array=new Array();

for(var f=1;f<=anzahlpos;f++)
{
var zwischenvarnummer=„teilsumme“+f;
if(document.getElementById(zwischenvarnummer).value != wirdberechnet)
var zwischenvar=parseFloat(document.getElementById(zwischenvarnummer).value);
else
var zwischenvar=0;
gesamtsumme_array[f]=parseFloat(zwischenvar);
}
Array.prototype.array_add = function() {
return eval(this.join("+"));
};
var gesamtsummesa = gesamtsumme_array.array_add();
document.getElementById(„gesamtsumme“).value= gesamtsummesa;
}
function teilsumme_berechnen(posnr,wievielepos)
{
var aktuellenr=„menge“+posnr;
var menge=parseInt(document.getElementById(aktuellenr).value);
var aktuellerpreis=„einzelpreis“+posnr;
var einzelp=parseFloat(document.getElementById(aktuellerpreis).value);
var teilsummex=einzelp*menge;
var xyz=„teilsumme“+posnr;
parseFloat(document.getElementById(xyz).value=teilsummex);
Gesamt(wievielepos);
}

Danke für Deine Hilfe!!
Gruß…

Hi,
wenns interessiert. Ich habs gelöst. Kleiner Haken war noch die variable Anzahl von Positionen. Daher hatte ich keine festen Variablennamen und musste diese erst generieren.

function Gesamt(anzahlpos)
{
var wirdberechnet=„wird berechnet …“;
gesamtsumme_array=new Array();

for(var f=1;f<=anzahlpos;f++)
{
var zwischenvarnummer=„teilsumme“+f;
if(document.getElementById(zwischenvarnummer).value != wirdberechnet)
var zwischenvar=parseFloat(document.getElementById(zwischenvarnummer).value);
else
var zwischenvar=0;
gesamtsumme_array[f]=parseFloat(zwischenvar);
}
Array.prototype.array_add = function() {
return eval(this.join("+"));
};
var gesamtsummesa = gesamtsumme_array.array_add();
document.getElementById(„gesamtsumme“).value= gesamtsummesa;
}
function teilsumme_berechnen(posnr,wievielepos)
{
var aktuellenr=„menge“+posnr;
var menge=parseInt(document.getElementById(aktuellenr).value);
var aktuellerpreis=„einzelpreis“+posnr;
var einzelp=parseFloat(document.getElementById(aktuellerpreis).value);
var teilsummex=einzelp*menge;
var xyz=„teilsumme“+posnr;
parseFloat(document.getElementById(xyz).value=teilsummex);
Gesamt(wievielepos);
}

Danke für Deine Hilfe!!
Gruß…

Hi,
wenns interessiert. Ich habs gelöst. Kleiner Haken war noch die variable Anzahl von Positionen. Daher hatte ich keine festen Variablennamen und musste diese erst generieren.

function Gesamt(anzahlpos)
{
var wirdberechnet=„wird berechnet …“;
gesamtsumme_array=new Array();

for(var f=1;f<=anzahlpos;f++)
{
var zwischenvarnummer=„teilsumme“+f;
if(document.getElementById(zwischenvarnummer).value != wirdberechnet)
var zwischenvar=parseFloat(document.getElementById(zwischenvarnummer).value);
else
var zwischenvar=0;
gesamtsumme_array[f]=parseFloat(zwischenvar);
}
Array.prototype.array_add = function() {
return eval(this.join("+"));
};
var gesamtsummesa = gesamtsumme_array.array_add();
document.getElementById(„gesamtsumme“).value= gesamtsummesa;
}
function teilsumme_berechnen(posnr,wievielepos)
{
var aktuellenr=„menge“+posnr;
var menge=parseInt(document.getElementById(aktuellenr).value);
var aktuellerpreis=„einzelpreis“+posnr;
var einzelp=parseFloat(document.getElementById(aktuellerpreis).value);
var teilsummex=einzelp*menge;
var xyz=„teilsumme“+posnr;
parseFloat(document.getElementById(xyz).value=teilsummex);
Gesamt(wievielepos);
}

Danke für Deine Hilfe!!
Gruß…

Servus und Sorry für die späte Antwort, war unterwegs.

Na das ist doch gut das du es gelöst hast.
Versuchs beim nächsten mal mehr iterativ, dann lösen ich die meisten Probleme von alleine :smile:

Greetings
Matze

Hallöchen,

Entschuldige bitte die späte Antwort. Leider habe ich im Moment nicht die Zeit bei dem Problem konkret zu helfen, da ich Uni-Klausuren vorbereiten muss. Aber wenn du Interesse hast kann ich dir gerne kommendes Wochenende einen Vorschlag schicken. Das Problem versteh ich und ich finde da ganz sicher einen effizienten Lösungsweg. Gib mir einfach kurz Bescheid, ob du dann noch Interesse hast.

Herzliche Grüße,
Markus Heimerl [stildenker]

Hi Markus,
dafür ist es eine freiwillige Plattform. Kein Problem.
Ich habe es nun lösen können.
Habe dazu bei jeder Teilsumnme das Program gesamt aufgerufen. Dort werden alle Teilsummen != „wird berechnet“ in ein Array gepackt und dann aufsummiert.
Problemchen war noch die dynamische Anzahl von „Blöcken“.
Aber so tut es. Irgendwas muss ich mir noch einfallen lassen wegen dem Zahlenformat (Komma statt Punkt und 1000-Trennpunkt), aber das kriege ich auch nich hin. Viel Erfolg
Oliver

Hallo Oliver

Array wäre eine Lösung, wenn auch unelegant. Ich würde wohl eine Schleife bauen, die über alle entsprechenden Elemente geht und die aktuellen Werte frisch aufsummiert.

Das geht entweder mit document.getElementsByTagName und anschließender Überprüfung, ob der Name des Elements mit ‚Menge‘ beginnt

oder einfacher: alle Elemente erhalten den gleichen Namen; dann genügt document.getElementsByName ohne anschließende Prüfung

ist aber beides im IE möglicherweise nicht unbedingt performant. Performant aber auch ein wenig unelegant wäre - eine gleichmäßige Struktur vorausgesetzt - das gezielte Ansteuern der Elemente im DOM-Tree. Schau Dir dazu mal http://forum.de.selfhtml.org/archiv/2006/6/t130530/ an.

Viel Spass, Titus

Hi Titus,
danke für Deine Antwort / Mühe.
Nun ja unendlich viele sind es nun nicht. Ich würde mal sagen. Im worst case sind es 50 Felder. Daher sollte die Performace nicht das Problem sein.
Mit ner Schleife hatte ich auch überlegt. Hatte es dann aber aufgegeben, weil ich ein „summe wenn“ nicht gefunden hatte.
Im ersten durchlauf habe ich halt zB 10 Felder und davon hat 1 einen Zahlenwert und die anderen 9 stehen auf „wird berechnet“. So packe ich es in ein Array wenn !=„wird berechnet“, dann einfach aufsummieren.
Gruß
Oliver

Hallo,
dazu kann ich leider nichts sagen.