molily: Wo liegt der Fehler

Beitrag lesen

Kleiner Tipp um all deine eval()-Aufrufe zu verbannen. Das ist nämlich langsam, umständlich, schlecht lesbar und erschwert die Fehlersuche.

Wenn du einen Formularnamen bzw. Feldnamen als String hast, kannst du in JavaScript so auf das entsprechende Element zugreifen:

document.forms["formularname"].elements["feldname"]
<http://de.selfhtml.org/javascript/objekte/elements.htm#allgemeines@title=Schema 4>

eval brauchst du nicht und solltest du auch nicht dafür verwenden. eval ist für andere Zwecke gedacht.

eval("document.berechnung."+Name+".value=ersetzePunkt(rundeEuro(ersetzeKomma(document.berechnung."+Name+".value)))")

Besser:
var feld = document.forms.berechnung.elements[Name];
feld.value = ersetzePunkt(rundeEuro(ersetzeKomma(feld.value)));

eval("document.berechnung."+Name+".value=0");

Außerdem musst du den ganzen Kladderadatsch nicht immer wiederholen, sondern kannst dir die Referenz auf das Feld-Element in einer Variablen zwischenspeichern.

function pruefeFeldNumerisch(Name) {
// überschreibt ein numerisches Feld mit seinem errechneten Inhalt
if (!isNaN(eval("ersetzeKomma(document.berechnung."+Name+".value)"))) {
var val=parseInt(eval("ersetzeKomma(document.berechnung."+Name+".value)")); //
Direkte Zuweisung macht Fehler in Mozilla - Bug?
eval("document.berechnung."+Name+".value=val")
} else
eval("document.berechnung."+Name+".value=0");
}

Hier einmal var feld = ... setzen und dann immer mit feld und feld.value arbeiten.

var jetzt=new Date();
var aktj=jetzt.getYear();
if (aktj<2000) aktj=aktj+1900; // Y2K-Fehler umgehen

Das ist kein Y2K-Fehler, sondern einfach ein Definitionsfehler. Nutze stattdessen getFullYear.

var feld=eval("document.berechnung."+Name);
var datum=feld.value;

Na, geht doch mit dem Zwischenspeichern.

document.getElementById(Name).className="";

Hier nutzt du plötzlich getElementById.
Wenn ohnehin alle Formularelemente ein gleichnamiges id-Attribut haben, dann verzichte auf document.forms, eval usw. und nutze nur noch getElementById - das ist nämlich das einfachste und schnellste.

var radiolen=eval("document.berechnung."+feldname+".length");
for (var element=0; element<radiolen; element++) {
if (eval("document.berechnung."+feldname+"["+element+"].checked")) wert=eval("document.berechnung."+feldname+"["+element+"].value")
}

var form = document.forms.berechnung,
  radioset = form.elements[feldname],
  radioset_length = radioset.length;
for (var i = 0; i < radioset_length; i++) {
  var field = radioset[i];
  if (field.checked) {
    wert = field.value;
    break; // evtl.
  }
  return wert;
}

// holt den Wert des Formularfeldes in die gleichnamige Variable

if (isInArray(feldname, radio_felder)) eval(feldname+"=leseRadiobutton('"+feldname+"')");

Wieso legst du diese ganzen globalen Variablen an?

Auch hier bräuchtest du eval nicht verwenden. Globale Variablen sind Eigenschaften des globalen window-Objektes und du kannst dieselbe Klammernschreibweise verwenden, wenn du Eigenschaftsnamen als Strings hast.

window[feldname] = leseRadiobutton(feldname);

Mathias