Jörg: Javascript - Validierung von Formular-Feldern

Beitrag lesen

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>