Startseite Forum
Willkommen, Gast
Benutzername: Passwort: Angemeldet bleiben:

Ich Finde Den Fehler Nicht (abfrage Eines Inputs)
(1 Leser) (1) Gast
Bitte beachten, dass es hier nur um Javascripts geht, die sich in unserem Archiv befinden.
  • Seite:
  • 1

THEMA: Ich Finde Den Fehler Nicht (abfrage Eines Inputs)

Ich Finde Den Fehler Nicht (abfrage Eines Inputs) 2 Jahre, 11 Monate her #1135

  • DerNordBrliner
Hier mal eben die Kurzfassung. Es sollen in den inputs, hier nur mit einem Beispiel, abgefragt werden, ob die richtigen Eingaben gemacht wurden. Doch irgend wo fehlt mir ein Objekt? WOOO?


<!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">

// MERKVARIABLEN
ganzzahlen_felder = new Array("PLZ");
waehrungs_felder = new Array("ESF1");
datums_felder = new Array("Datum");
radio_felder = new Array("_gelesen");
checkbox_felder = new Array("p");
menue_felder = new Array("Schulamt");
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 &amp;&amp; j<50) j=j+parseInt(aktj/100)*100; // Datum 0-49 zweistellig eingegeben (2000-2049)
if (j>=50 &amp;&amp; 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 setzeFocus(Name) {
// setze den Focus auf das übergebene Feld
if (Name) if (!eval("document.berechnung."+Name+".disabled"))
eval("document.berechnung."+Name+".focus()");
}

</script>

</head>
<body>
<form method="POST" action="formpost.de/send.ab?account=DerNordBerli...onf=Eberswalde" name="berechnung"
enctype="multipart/form-data">
<center><br><br><br>
<input value="0,00" maxlength="8" size="6" id="ESF1" name="ESF1" style="text-align: right" onChange="pruefeFormular(this.name);">
</form>
</body>
</html>

Nach der Eingabe eines Zeichens kommt die Meldung:
Zeile 238, Zeichen 1, Objekt erwartet

Was soll mir das sagen?

Gruß vom Markus

Ich Finde Den Fehler Nicht (abfrage Eines Inputs) 2 Jahre, 11 Monate her #7124

  • micha
  • OFFLINE
  • Administrator
  • Beiträge: 1919
  • Karma: 31
Du rufst eine Funktion namens "pruefeFormular" im onchange-Attribut des Feldes auf. Aber die Funktion gibts nirgends...

Ich Finde Den Fehler Nicht (abfrage Eines Inputs) 2 Jahre, 11 Monate her #7125

  • DerNordBrliner
Ich Dummerchen, wenn muss man auch alles richtig kopieren. Hier nun alles, mit demselben Fehler.

<!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">

// MERKVARIABLEN
ganzzahlen_felder = new Array("PLZ");
waehrungs_felder = new Array("ESF1");
datums_felder = new Array("Datum");
radio_felder = new Array("_gelesen");
checkbox_felder = new Array("p");
menue_felder = new Array("Schulamt");
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 &amp;&amp; j<50) j=j+parseInt(aktj/100)*100; // Datum 0-49 zweistellig eingegeben (2000-2049)
if (j>=50 &amp;&amp; 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 faerbeFehlerfeld(Name) {
// Färbt das übergebene Feld rot ein
if (document.getElementById) document.getElementById(Name).className="error"; // nur 6er Browser, Felder brauchen ID!
}

function entfaerbeFehlerfeld(Name) {
// Färbt das übergebene Feld wieder normal
if (document.getElementById) { // nur 6er Browser, Felder brauchen ID!
if (Name!="palter") document.getElementById(Name).className="";
else document.getElementById(Name).className="text"; // Sonderfall!!!
}
}
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 setzeFocus(Name) {
// setze den Focus auf das übergebene Feld
if (Name) if (!eval("document.berechnung."+Name+".disabled"))
eval("document.berechnung."+Name+".focus()");
}

function pruefeFormular(changed) {
pruefeFeld(changed);
if (changed) holeFeldInVariable(changed);
if (changed=="p") aktivierePartner(p);
if (changed=="submit") {
for (var i in eingabe_felder) entfaerbeFehlerfeld(eingabe_felder[i]);

var text="";
if (text) {
text="Es sind noch nicht alle benötigten Felder ausgefüllt:\n\n\n"+text+"\n\nBitte überprüfen Sie Ihre Eingaben.";
alert (text);
return false;
} else
return true;
}

}
</script>

</head>
<body>
<form method="POST" action="" name="berechnung"
enctype="multipart/form-data">
<center><br><br><br>
<input value="0,00" maxlength="8" size="6" id="ESF1" name="ESF1" style="text-align: right" onChange="pruefeFormular(this.name);">
</form>
</body>
</html>

Ich Finde Den Fehler Nicht (abfrage Eines Inputs) 2 Jahre, 11 Monate her #7126

  • Tare
Ich verstehe zwar einige Stellen in deinem Code nicht aber dieser Fehler wird, wenn ich nichts übersehen habe, zum einen durch die Function pruefeFeld ausgelöst dadurch das du keine geschweiften klammern in deiner else-if-Folge verwendet hast.
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;
  }
 }
}
}

zum anderen durch eine seltsame Schreibweise in einer Abfrage. Wiesoschreibst du denn &amp;&amp; anstelle von &&? Gibt doch eigentlich keinen Grund dafür, ist ein Javascript und kein HTML dem du sagen willst was für ein Zeichen angezeigt werden soll.Das ist in der Function pruefeFeldDatum, kommt zweimal vor das ganze, sollteste selbst finden eigentlich. Wenn weiterhin Probleme bestehen wieder melden
  • Seite:
  • 1
Ladezeit der Seite: 0.47 Sekunden

Login

Aktuell im Forum

mehr