# Textfeld nur Zahlen zulassen



## kevkev (17. Dezember 2004)

Hi,

Ich hab ein Formular in dem man Zahlen einfügen muss.
Da ich es aber zu umständlich finde, erst nach dem "senden" button zu üerprüfen, ob es wirklich zahlen sind. will ich das über js machen.
Es soll so :
Wenn jemand ein anderes zeichen als eine zahl eintippt, soll diese zeichen einfach nicht erscheinen. wie bei den "ok" feld von dialern, da kann auch nur "o" und "k" eingetippt werden.

Weiß da jemand was?

Gruß kevin


----------



## Jerinca (17. Dezember 2004)

Hallo!

Ich weiß nicht, ob es dafür eine einfachere Methode gibt, aber spontan würde mir folgendes einfallen:

Im Textfeld machst Du einen EventHandler onKeyUp, der eine kleine Funktion auslöst.

Und in dieser Funktion überprüfst Du dann, ob gerade eine Zahl eingegeben worden ist, oder eben nicht.

Mein Vorschlag (getestet und für gut befunden   ):

```
<form name="form1">
<input type="text" name="zahlenfeld" value="" maxlength="5" onKeyUp="zahl()">
...
<script language = "javascript">
function zahl() {
if (document.form1.zahlenfeld.value < "0" || "9" < document.form1.zahlenfeld.value)  {
	document.form1.zahlenfeld.value = "";
	document.form1.zahlenfeld.focus();
	return false;
	}
}
</script>
```
Wichtig ist das onKeyUp! Mit onKeyDown geht es nämlich nicht! Formularname und Feldname mußt Du natürlich noch an Deine Daten anpassen...

Hoffe, Dir geholfen zu haben


----------



## kevkev (17. Dezember 2004)

Hey Danke               

Genau sowas hab ich gesucht! Jetzt kann mein projekt weitergehen  ;-) !

Gruß kevin


----------



## kevkev (17. Dezember 2004)

Hi,

Bei mir funktioniert das als einzelene html-date recht gut, aber wenn ich es in meine html einbaue funtz es nicht:

Der name des feldes ist "feld1_breite".
Das Feld ist ca. in der mitte der seite.
             <script language="javascript">
function zahl() {
if (document.form1.feld1_breite.value < "0" || "9" < document.form1.feld1_breite.value) {
document.form1.feld1_breite.value = "";
document.form1.feld1_breite.focus();
return false;
}
}
            </script>

Kannst du mir helfen?

gruß kevin


----------



## Jerinca (17. Dezember 2004)

Leider muß ich Deine Freude wieder dämpfen   

Ich war mal wieder zu übereifrig und voreilig!

Vielleicht hast Du selbst schon bemerkt, daß mein erstes Script noch 2 Bugs hat: Es klappt nur, wenn das erste eingegebene Zeichen ein Buchstabe o.ä. ist. Wenn Du zuerst eine Zahl eingibst und dann einen Buchstaben... na, dann klappt's nicht mehr...

Was Du brauchst, ist noch eine for-Schleife mit einem Substring, der gewährleistet, daß immer jedes zeichen überprüft wird, und einen Substring, der im Fall einer "Nichtzahl" diese wieder abschneidet:

```
<script language = "javascript">
function zahl() {
var zahl = document.form1.zahlenfeld;
	for (var i = 0; i < zahl.value.length; i++) {
		var z = zahl.value.substring(i, i + 1);
		if (z < "0" || "9" < z)  {
			var zahl2 = zahl.value.substring(0, zahl.value.length-1);
			zahl.value = zahl2;
			zahl.focus();
			return false;
		}
	}
}
</script>
```

Sorry, daß ich nur eine halbfertige Funktion gepostet habe leider hatte ich nicht genügend getestet... 

Aber nun sollte es *hoffentlich* funktionieren (aber mit Versprechen - wie beim letzten Mal - bin ich diesmal vorsichtig   )

Bis dann, Jerinca


----------



## Jerinca (17. Dezember 2004)

Hallo nochmal!

Ui, da haben wir wohl zeitlich aneinander vorbeigeschrieben...

Also, erstmal nimmst Du jetzt lieber meine zuletzt gepostete Funktion.

Ansonsten sieht das alles ganz gut aus...

Könnte es vielleicht sein, daß Du gar kein Formular innerhalb Deines HTML-Tag-Paares hast oder Deins einen anderen Namen hat?

Solltest Du kein Formular haben oder eins, das nicht "form1" heißt, dann geht's natürlich nicht... Ach ja, zu einem <form name="xyz"> gehört natürlich immer auch ein </form>

Was anderes fällt mir so nicht ein... Hast Du vielleicht eine spezielle Fehlermeldung bekommen? Dann poste die gleich mal mit   

Bis denn dann...


----------



## Sven Mintel (17. Dezember 2004)

Schaut mal hier hinein... es geht auch mit einem schlichten Einzeiler


----------



## zeromancer (18. Dezember 2004)

Noch größere Flexibilität erreicht man mit Regular Expressions


----------



## Sven Mintel (18. Dezember 2004)

Eine Zahl ist mit RegExp genauso flexibel wie ohne, denke ich ... garnicht


----------



## zeromancer (18. Dezember 2004)

Sven Mintel hat gesagt.:
			
		

> Eine Zahl ist mit RegExp genauso flexibel wie ohne, denke ich ... garnicht



Die Flexibilität bezog sich auf die Prüfungen, z.B. auf bestimmte Ziffern an bestimmter Stelle, Länge, etc.


----------



## con-f-use (18. Dezember 2004)

@Sven:
 Bei deiner Methode gibt's aber ein kleines Problem, denn im Netscape und im Mozilla kann man dann einmal gemachte Eingaben nicht mehr löschen, weil das <input>-Feld nicht mehr auf [Backspace] oder [Etnf] reagiert.


----------



## Sven Mintel (18. Dezember 2004)

Warum... man kann das Ganze doch markieren, und dann ne andere Zahl eingeben


----------



## con-f-use (18. Dezember 2004)

Schon, aber es ist doch etwas irritierend, wenn man weder entf noch backspace benutzen kann...


----------

