Hallo,
W e n n ... ist genau richtig. Aber wenn nicht, wird doch wieder eine Zeichenkette draus!
Wenn nicht ganz sicher ist, dass d bereits eine Zahl enthält, dann muß es richtig heißen:
d=eval(d) + eval(document.f.elements[z].value)
Das ist immer eine Zahl als Additionsergebnis.
parseInt() ist statdessen zu nehmen, wenn d (vorher und nachher) eine Ganze Zahl (Integer) ist bzw. sein soll. (Aber Vorsicht, da wird nicht grundet, sondern die Nachkommastellen werden abgeschnitten.)
Hier wuerde ich auch eher zu solchen Formulierungen greifen:
d=parseInt(d,10) + parseInt(document.f.elements[z].value,10);
oder
d=parseFloat(d) + parseFloat(document.f.elements[z].value);
Wenn es explizite Typkonvertierungsfunktionen gibt, verwende ich diese und nicht eval(). Letzteres halte ich am ehesten bei der Zusammensetzung von Ausdruecken fuer angebracht, z. B.:
var a,b,c,d,e;
a="Math";
b="pow";
c=2;
d=4;
e=eval(a+"."+b+"("+c+","+d+")");
alert(e); // 16
Ansonsten ist eval() meistens ersetzbar oder ganz entbehrlich.
MfG, Thomas