Hallo,
habe ein Problem, bei dem ich nicht weiterkomme. Habe ein per PHP generiertes Formular, in welches nummerische Eingaben getätigt werden sollen. Wird ein nicht nummerischer Wert eingegeben, soll eine kleine Meldung erscheinen.
Leider verhält sich Javascript völlig unerwartet und gibt entweder alles als Fehler aus, oder alles ist korrekt. Auch verhalten sich die Browser unterschiedlich: Opera macht nix, FF & IE erkennen jede Eingabe als Fehler.
Habe den Output mal als statisches HTML aufbereitet, damit man sich ein Bild machen kann. Vielleicht kann mir jemand sagen, wo ich hier den Denkfehler gemacht habe?
Vielen Dank schon mal im Voraus,
Jörg
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<HTML><HEAD><TITLE>Javascript-Test</TITLE>
<SCRIPT type="text/javascript">
var footer = '\n\nVielen Dank für die Beachtung';
var SepChar = '+';
function sl_form_edit_check()
{
var sl_text_1 = 'In der Liste wurde ein Wert eingetragen, der nicht gespeichert werden kann.\n\nBitte den folgenden Eintrag korrigieren:\n\n >>>';
var data = document.helper.content.value.split(SepChar); // Werte aus dem Helper-Formular
var dmax = data.length; // Anzahl der Helper-Werte
with (document.liste)
{
for (i = 0; i < dmax; i++) {
var d = data[i]; // Ort ermitteln (Quelle: Helper)
var x = elements[d]; // daraus Referenz auf Element nehmen
var res = checkNumber(x);
if (res == 2){ // Ist definiert, nicht Null und hat ungültigen Wert?
var n = document.getElementById(d);
var errmsg = sl_text_1 + n.innerHTML + ' (Wert: "' + x.value + '") {res: ' + res + '} <<<' + footer;
alert(errmsg);
x.focus();
return false;
}
}
}
return true;
};
function checkNumber( /* (object: document.forms['liste'].elements[i]) */ v) {
try {
if (defined(v.innerHTML)) {
if (is_number(v.innerHTML)) {
throw 'ok';
}
if (!is_number(v.innerHTML)) {
throw 'error';
}
} else {
throw 'nothing';
}
}
catch (e) {
switch (e) {
case 'ok':
// Ok, Feld beinhaltet einen nummerischen Wert
return 1;
break;
// Fehler: Falsche Eingabe
case 'error':
return 2;
break;
// FallBack: Wird Exception gleich am Anfang ausgelöst,
// ist das Feld leer und muss nicht weiter beachtet werden
case 'nothing':
default:
return 0;
break;
}
}
};
function defined(w){ return w != undefined && w != null; };
function is_number(w){ return (typeof w == 'number') && !isNaN(w); };
</SCRIPT>
<BODY>
<FORM name="liste" onsubmit="return sl_form_edit_check();">
<TABLE>
<THEAD>
<TR>
<TH>Ort</TH>
<TH>Anzahl</TH>
</TR>
</THEAD>
<TBODY>
<TR><TD id="o1">Berlin</TD><TD><INPUT type="text" name="o1"/></TD></TR>
<TR><TD id="o3">Hamburg</TD><TD><INPUT type="text" name="o3"/></TD></TR>
<TR><TD id="o8">München</TD><TD><INPUT type="text" name="o8"/></TD></TR>
</TBODY>
</TABLE>
<BR>
<INPUT type=hidden value="sl_save" name="mode"><INPUT class="button_save" type="submit" value="Eingaben speichern"></FORM>
<FORM name="helper"><INPUT type="hidden" value="o1+o3+o8" name="content"></FORM>
</BODY>
</HTML>