Hallöchen,
ich habe von einem Bekannten ein Script erhalten, welches Eingaben in einem Formular überprüft. Leider erreiche ich ihn nicht und finde einfach den Fehler nicht. vielleicht hat einer von euch ja eine Idee.
Ich habe das Formular mal bis auf ein Feld gekürzt aber das gedamt Script ist mit drin:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
<script type="text/javascript" src="http://www.markus-melich.de/ios/mmtype.js">
<script type="text/javascript">
// MERKVARIABLEN
ganzzahlen_felder = new Array("_1.3_PLZ", "_1.6_VWSchule1", "_1.6_TelSchule",
"_1.6_VWSchule2", "_1.6_FaxSchule", "_1.3a_KoopPLZ", "_1.6a_KoopVWTel",
"_1.6a_KoopTelefon", "_1.6a_KoopVWFax", "_1.6a_KoopFax", "_2.3_LeisPLZ",
"_2.6_LeisVWTel", "_2.6_LeisTelefon", "_2.6_LeisVWFax", "_2.6_LeisFax",
"_3.2_Leis1PLZ", "_3.5_Leis1VWTel", "_3.5_Leis1Telefon", "_3.5_Leis1VWFax",
"_3.5_Leis1Fax", "_3.7_BLZ", "3.7_Konto", "_6.1_TNLehrer", "_6.1_FrauenLehrer",
"_6.1_MaennerLehrer", "_6.2_TNSchueler", "_6.2_Maedchen", "_6.2_Jungen",
"_6.2_Migration", "_6.2_Klasse7", "_6.2_Klasse8", "_6.2_Klasse9",
"_6.2_Klasse10");
waehrungs_felder = new Array("_9.0_ESF1", "_9.0_BA1","_9.0_KO1", "_9.0_ESF2",
"_9.0_BA2", "_9.0_KO2");
datums_felder = new Array("_10_Datum10", "_11_Datum11");
radio_felder = new Array("_gelesen");
checkbox_felder = new Array("p");
menue_felder = new Array("_1.3_Schulamtsbezirk", "_1.8_Anrede1", "_1.8_Titel1",
"_1a_Koop", "1.3a_KoopBezirk", "1.8a_KoopAnrede", "1.8a_KoopTitel",
"_2.8_LeisAnrede", "_2.8_LeisTitel", "_3.1_Leis1Anrede", "_3.1_Leis1Titel",
"_5.1_Wo", "5.1_Wo2", "5.1_Wo3", "_5.3_Zuordnung", "_5.4.1_Gleichheit1",
"_5.4.1_Gleichheit2", "5.4.1_Gleichheit2a", "5.4.1_Gleichheit2b",
"5.4.1_Gleichheit2c", "5.4.1_Gleichheit2d", "_5.4.2_Umwelt", "_5.4.3_Trans",
"_5.4.4_Chancen", "5.4.4_Chancen1a", "5.4.4_Chancen1b", "5.4.4_Chancen1c",
"_6.1_Ziel", "6.1_Ziel1", "_6.3_Alter", "_7_Leistung", "7_Leistung1",
"7_Leistung2", "7_Leistung3", "7_Leistung4", "_9.2_Abzug", "_9.2_Vorteil");
eingabe_felder = ganzzahlen_felder.concat(waehrungs_felder, datums_felder,
radio_felder, checkbox_felder, menue_felder);
// PROGRAMM-FUNKTIONEN
function ersetzeKomma(wert) {
// Ersetzt Komma durch Dezimalpunkt
var ergebnis=""+wert;
var pos=ergebnis.indexOf(",");
if (pos >= 0) {
ergebnis=ergebnis.substring(0,pos)+"."+ergebnis.substring(pos+1);
}
ergebnis=parseFloat(ergebnis);
return ergebnis;
}
function ersetzePunkt(wert) {
// Ersetzt Dezimalpunkt durch Komma und schneidet bei Bedarf die hinteren
Stellen ab
var ergebnis=""+wert;
var pos=ergebnis.indexOf(".");
if (pos >= 0) {
ergebnis=ergebnis.substring(0,pos)+","+(ergebnis+"00").substr(pos+1,2);
} else if (parseFloat(ergebnis)==0)
ergebnis="0";
else
ergebnis=parseInt(ergebnis)+",00";
return ergebnis;
}
function rundeEuro(a) {
// rundet den Betrag auf 2 Stellen nach dem Komma
z1=parseFloat(a)*100;
z1=Math.round(z1);
z2=parseInt(z1)/100;
return z2;
}
function schreibeEuro(betrag) {
// gibt einen Eurobetrag mit Komma und zwei Stellen zurück
// für die Ausgabe in Feldern
return ersetzePunkt(rundeEuro(betrag))+" €";
}
function pruefeFeldWaehrung(Name) {
// überschreibt ein Euro-Feld mit seinem schönformatierten Inhalt
if (!isNaN(eval("ersetzeKomma(document.berechnung."+Name+".value)")))
eval("document.berechnung."+Name+".value=ersetzePunkt(rundeEuro(ersetzeKomma(document.berechnung."+Name+".value)))")
else
eval("document.berechnung."+Name+".value=0");
}
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");
}
function pruefeFeldDatum(Name, quiet) {
// prüft ein Datum und ersetzt den Inhalt mit dem schönformatierten Inhalt
// im Fehlerfall wird das Feld rot eingefärbt und die Funktion gibt false zurück
var jetzt=new Date();
var aktj=jetzt.getYear();
if (aktj<2000) aktj=aktj+1900; // Y2K-Fehler umgehen
var fehler="Das Datum ist nicht richtig eingegeben worden oder macht keinen
Sinn.\nBitte geben Sie das Datum im Format "tt.mm.jj" oder "tt.mm." an (z.B.
1.7."+aktj+" oder 1.7.).";
var feld=eval("document.berechnung."+Name);
var datum=feld.value;
// Prüfen
if (datum=="") return true; // leere Eingabe
if (datum.indexOf(".")==-1) { // 1. Punkt fehlt
Fehler();
return false;
}
var t=parseFloat(datum.substring(0,datum.indexOf("."))); // Tag
datum=datum.substr(datum.indexOf(".")+1,datum.length-datum.indexOf(".")-1); //
Rest isolieren
if (datum.indexOf(".")==-1) { // 2. Punkt fehlt
Fehler();
return false;
}
var m=parseFloat(datum.substring(0,datum.indexOf("."))); // Monat
datum=datum.substr(datum.indexOf(".")+1,datum.length-datum.indexOf(".")-1); //
Rest isolieren
if (datum=="") datum=aktj;
var j=parseFloat(datum); // Jahr
if (j>=0 && j<50) j=j+parseInt(aktj/100)*100; // Datum 0-49 zweistellig
eingegeben (2000-2049)
if (j>=50 && j<100) j=j+parseInt(aktj/100)*100-100; // Datum 50-99 zweistellig
eingegeben (1950-1999)
if (isNaN(t) || isNaN(m) || isNaN(j) || t<=0 || m<=0 || j<=2009 || m>12 ||
j>aktj+1) { // untere oder obere Grenze verletzt
Fehler();
return false;
}
var tgrenze=31; // Obergrenze für den Tag bestimmen
if (m==4 || m==6 || m==9 || m==11) tgrenze=30;
if (m==2) { // Schaltjahr
tgrenze=28;
if (j%4==0) tgrenze++;
if (j%100==0) tgrenze--;
if (j%400==0) tgrenze++;
}
if (t>tgrenze) { // Obergrenze Tag verletzt
Fehler();
return false;
}
// Nullen bei den Einzelwerten einfügen
if ((""+t).length==1) t="0"+t;
if ((""+m).length==1) m="0"+m;
// Datum neu zusammenbauen und ins Feld schreiben
feld.value=t+"."+m+"."+j;
document.getElementById(Name).className="";
return true;
function Fehler() {
// Hilfsfunktion für prüfeFeldDatum
//feld.value=""; // Inhalt nicht löschen - Feld muss vor Berechnung erneut
geprüft werden
if (!quiet) alert (fehler);
if (document.getElementById) document.getElementById(Name).className="error";
}
}
function schreibeFeld(Name,wert) {
// schreibt Wert in das Inputfeld
eval("document.berechnung."+Name+".value=schreibeEuro(wert)");
}
function schreibeFeldNumerisch(Name,wert) {
// schreibt numerischen Wert in das Inputfeld
// für sichtbare Inputfelder mit Ganzzahlenangabe
eval("document.berechnung."+Name+".value=parseInt(wert)");
}
function schreibeFeldOhneEuro(Name,wert) {
// schreibt Euro-Wert ohne Währungssymbol in das Inputfeld
// für sichtbare Inputfelder mit Eurowerten
eval("document.berechnung."+Name+".value=ersetzePunkt(rundeEuro(wert))");
}
function leseFeld(Name) {
// liest das Formularfeld mit dem übergebenen Namen aus und zwingt das Ergebnis
nach Float
return parseFloat(eval("ersetzeKomma(document.berechnung."+Name+".value)"));
}
function leseDatum(Name) {
// prüft und liest das Datums-Formularfeld im sicher gültigen Format tt.mm.jjjj
(oder leer) aus
if (pruefeFeldDatum(Name,true)) return eval("document.berechnung."+Name+".value");
else return "";
}
function leseRadiobutton(feldname){
// wertet eine Radiobutton-Gruppe aus und liefert den Wert des angeklickten
Elements
var wert="";
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")
}
return wert;
}
function leseMenue(feldname) {
// liest das Formularfeld Bundesland in eine Variable ein
wert=eval("document.berechnung."+feldname+".value");
return wert;
}
function isInArray(wert, feld) {
// sucht einen Wert im Array und liefert den entsprechenden Wahrheitswert zurück
var erfolg=false;
for (var i in feld) {
if (feld[i]==wert) {
erfolg=true;
break;
}
}
return erfolg;
}
function holeFeldInVariable(feldname) {
// holt den Wert des Formularfeldes in die gleichnamige Variable
if (isInArray(feldname, radio_felder)) eval(feldname+"=leseRadiobutton('"+feldname+"')");
else if (isInArray(feldname, checkbox_felder)) eval(feldname+"=document.berechnung."+feldname+".checked");
else if (isInArray(feldname, datums_felder)) eval(feldname+"=leseDatum('"+feldname+"')");
else if (isInArray(feldname, menue_felder)) eval(feldname+"=leseMenue('"+feldname+"')");
else eval(feldname+"=leseFeld('"+feldname+"')");
}
function pruefeFeld(feldname) {
// prüft das angegebene Feld auf Plausibilität und ändert es bei Bedarf
if (isInArray(feldname, datums_felder)) return pruefeFeldDatum(feldname);
else if (isInArray(feldname, ganzzahlen_felder)) return
pruefeFeldNumerisch(feldname);
else if (isInArray(feldname, waehrungs_felder)) return
pruefeFeldWaehrung(feldname);
else return true;
}
function faerbeFehlerfeld(Name) {
// Färbt das übergebene Feld rot ein
if (document.getElementById) document.getElementById(Name).className="error";
}
function entfaerbeFehlerfeld(Name) {
// Färbt das übergebene Feld wieder normal
if (document.getElementById) {
else document.getElementById(Name).className="text";
}
}
function setzeFocus(Name) {
// setze den Focus auf das übergebene Feld
if (Name) if (!eval("document.berechnung."+Name+".disabled"))
eval("document.berechnung."+Name+".focus()");
}
function numeralsOnly(evt) {
evt = (evt) ? evt : event;
var charCode = (evt.charCode) ? evt.charCode : ((evt.keyCode) ? evt.keyCode :
((evt.which) ? evt.which : 0));
if (charCode > 31 && (charCode < 44 || charCode > 57)) {
alert("Hier doch NUR ganze Zahlen!");
return false;
}
return true;
}
</script>
</head>
<body>
<form method="POST" action="http://formpost.de/send.ab?account=DerNordBerliner&konf=Eberswalde" name="berechnung" enctype="multipart/form-data">
<center><br><br><br>
<input value="0,00" maxlength="8" size="6" id="_9.0_ESF1" name="_9.0_ESF1" style="text-align: right" onkeypress="return numeralsOnly(event);" onChange="pruefeFormular(this.name);">
</form>
</body>
</html>
Freue mich über jeden Hinweis.
Gruß Markus