[JavaScript] Problem mit der String-Zahlenumwandlung

Quidoff

Lieutenant
Registriert
Feb. 2005
Beiträge
897
Hallo,
ich habe Eingabefelder auf einer Seite, in die man nur die Zahlen von 0 bis 15 eingeben kann.
Im Internet Explorer und im Firefox tritt das Phänomen auf, dass die Eingabe "08" und "09" verworfen wird. Die Zahlen "00" bis "07" funktionieren aber.
Das ist mein Code:
HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>String-Zahlenumwandlung<title>
</head>

<body>
<form action="" method="get">
	Deutsch: <input name="deutsch" type="text" /><br/>
	Mathe: <input name="mathe" type="text" /><br/>
	Englisch: <input name="englisch" type="text" />
</form>

<script type="text/javascript">
<!--
	var inputs = document.getElementsByTagName('form')[0].getElementsByTagName('input');

	for(var i=0; i < inputs.length; i++) {
		var input = inputs[i];
		if(input.type=="text") {					
			input.onblur = function() {
				if(this.value.length>2 || parseInt(this.value)>15 || parseInt(this.value)<0 || parseInt(this.value)!=String(this.value)) {
					this.value='';
				}
			}
		}
	}
//-->
</script>
</body>
</html>
Die Eingabe ist also auf jeden Fall falsch, wenn die Länge des eingegebenen String größer ist als 2 (man soll also auch nur "00" bis "15" eingeben können und nicht "000" bis "015"). Es ist auch falsch, wenn die Zahl größer als 15 oder kleiner als 0 ist. Mit der letzten Bedingung prüfe ich, ob der Zahlenwert der Eingabe mit der Eingabe an sich übereinstimmt. Wenn man z.B. "1a" eingibt, dann ist der Zahlenwert "1", aber das entspricht nicht der Eingabe.
Wie gesagt ist diese letzte Bedingung wohl für die Eingabe von "08" und "09" im Internet Explorer und Firefox wahr.
Warum funktioniert es bei dieses Eingaben nicht?

//edit
Hier könnt ihr den Code als Seite sehen. In Opera 9.1 tritt das Problem nicht auf.

Mfg
Quidoff
 
Zuletzt bearbeitet: (Link hinzugefügt)
Willkommen in der Welt der Oktalzahlen ;) Die JavaScript/ECMA Script-Implementationen von Mozilla und Microsoft interpretieren Litarele mit einer führenden 0 als eine Oktalzahl, wohingegen Opera diese als Dezimalzahlen interpretiert. Da das Oktalsystem nur die Ziffern 0 bis 7 kennt, parst die Funktion parseInt() bei Mozilla und IE bei "08" und "09" nur das erste Zeichen und liefert somit in beiden Fällen 0 zurück.
Korrekt sind beide Implementierungen, da der ECMA-Standard beide Ansätze erlaubt, um Portabiliät und Eindeutigkeit zu erreichen, solltest du parseInt() mit dem optionalen zweiten Parameter (Basis) aufrufen:
Code:
parseInt("08"); // liefert je nach Implementation 0 oder 8 zurück
parseInt("08", 10); // liefert immer 8 zurück

greetings, Keita
 

Ähnliche Themen

Antworten
10
Aufrufe
2.553
Antworten
5
Aufrufe
1.287
Antworten
4
Aufrufe
1.579
Zurück
Oben