Ein html Eingabefeld auf bestimmte Werte begrenze
meisterB
- javascript
Hallo Leute, ich hab eine Frege.
Ich hab in ner html Seite ein Eingabefeld für eine Prozentzahl.
Das Feld ist drei Stellen groß, also maximale eingabe 999. Jetzt soll aber maximal 100 erlaubt sein, is ja klar. Kann ich das irgendwie mit JavaScript lösen, das es während der Eingabe geprüft wird??
Für Hilfe bin ich wie immer dankbar!
MFG Sebastian
Hallo
Kann ich das irgendwie mit JavaScript lösen, das es während der Eingabe geprüft wird??
Also während der Eingabe nicht aber mit onBlur() gehts. Einfach abfragen ob feld.value<=100.
Nils
Warum kann man das nicht direkt mit onkeyup prüfen?
Enrico
Warum kann man das nicht direkt mit onkeyup prüfen?
Enrico
Stimmt.....hab ich nicht weit genug gedacht!
mea culpa!!!
Nils
Hi there,
Kann ich das irgendwie mit JavaScript lösen, das es während der Eingabe geprüft wird??
Also während der Eingabe nicht aber mit onBlur() gehts. Einfach abfragen ob feld.value<=100.
Natürlich geht's während der Eingabe, man muß nur mit onfocus() ein javascript starten, daß in einer window.setTimeout - schleife mit aufruf alle hundertstel Sekunden oder so den Input überwacht und entsprechend reagiert. Ob sinnvoll ist, ist eine andere Frage, aber möglich ist es...
hi,
Natürlich geht's während der Eingabe, man muß nur mit onfocus() ein javascript starten, daß in einer window.setTimeout - schleife mit aufruf alle hundertstel Sekunden oder so den Input überwacht und entsprechend reagiert.
warum nicht eher auf onkeyup und ggf., um Christophs einwurf bezüglich des einfügens per maus zu berücksichtigen, noch onmouseup prüfen?
gruß,
wahsaga
Hi there,
warum nicht eher auf onkeyup und ggf., um Christophs einwurf bezüglich des einfügens per maus zu berücksichtigen, noch onmouseup prüfen?
tja, warum nicht? Geht sicher auch, afaik aber erst ab js 1.2, was ni den meisten Fällen auch egal sein dürfte...
<form>
<input onkeyup="check()" />
</form>
<script>
function check(){
var num = parseInt(document.forms[0].elements[0].value)
if(isNaN(num)){
document.forms[0].elements[0].value = 0;
}
if(num > 100){
num = 100;
}
document.forms[0].elements[0].value = num;
}
</script>
ich glaub das müsste passen. Viel Spaß
Enrico
Hi,
nicht nur, das Du dem OP Deinen Code völlig kommentarlos vor die Füße knallst -- er ist schließlich doch kein Hund, dem man auf diese Weise einen Knochen vorwirft, oder? -- nein, Dein Code ist auch nicht gerade sauber.
<form>
<input onkeyup="check()" />
Trifft "onkeyup" auch bei C&P mit der Maus zu? "onchange" wäre da doch der passendere Signalgeber, glaube ich.
</form>
<script>
function check(){
var num = parseInt(document.forms[0].elements[0].value)
Hier fehlt das Semikolon am Ende. War aber wohl ein Versehen, beim Rest steht's ja da.
if(isNaN(num)){
document.forms[0].elements[0].value = 0;
Eigentlich wäre die Zuweisung ' = ""' passender. Aber Javascript nimmt's ja nicht so genau mit den Typen.
Aber ein grundsätzliches Problem:
parseInt() versteht keine Locale, ein Wert wie "6,0" wäre demnach unzulässig obwohl eigentlich korrekt.
}
if(num > 100){
num = 100;
Bei einer ordentliche UI verbietet sich so ein Eingriff, es ist lediglich eine Warnung auszugeben und der Wert zu ignorieren. Ändern darf man ihn aber auf keinen Fall ohne vorher die Funktion cristalBall() darauf angewendet zu haben.
Dadurch entfällt natürlich auch:
}
document.forms[0].elements[0].value = num;
}
</script>
Da die Zahl bis 100 gehen soll, jedoch nur drei Stellen vorgesehen sind, ist anzunehmen, das negative Wert nicht erlaubt sein sollen. Die Prüfung daraufhin fehlt also.
so short
Christoph Zurnieden
Hi Christoph,
danke für deine Hinweise. Ich werde mir nächstes Mal mehr Mühe geben.
Onkeyup habe ich benutzt, weil ich festgestellt habe, dass onchange erst reagiert wenn man das eingabefeld verlässt und onkeyup direkt. Natürlich wäre onchange sinnvoller.
Auch hast du Recht mit der Behauptung das 6,0 (deutsche Schreibweise) zulässig ist. Ich bin von reinen Ganzzahlen ausgegangen und habe natürlich die negativen Vergessen. Sorry.
Warum ist die Zuweisung ="" besser als =0? Je nachdem was man erreichen möchte, kann man dem User schon eine NULL angeben oder?
Was meinst du mit Funktion cristalBall() und warum kann ich die Variable nicht direkt auf 100 setzen wenn er zuhoch ist?
CU
Enrico
Hi,
danke für deine Hinweise. Ich werde mir nächstes Mal mehr Mühe geben.
sind doch hier schließlich nicht bei H..., oder? >;->
Onkeyup habe ich benutzt, weil ich festgestellt habe, dass onchange erst reagiert wenn man das eingabefeld verlässt und onkeyup direkt. Natürlich wäre onchange sinnvoller.
Gut, wenn Du einen Grund für Deine Entscheidung angeben kannst, ist das ja auch in Ordnung, aber dann gib den auch an. Ich habe mich ja auch weniger über Deinen Code erhitzt denn über die Art und Weise des Servierens.
Auch hast du Recht mit der Behauptung das 6,0 (deutsche Schreibweise) zulässig ist. Ich bin von reinen Ganzzahlen ausgegangen und habe natürlich die negativen Vergessen. Sorry.
Nicht entschuldigen, besser machen.
Warum ist die Zuweisung ="" besser als =0? Je nachdem was man erreichen möchte, kann man dem User schon eine NULL angeben oder?
Da Javascript die Typisierung meistens selbst betreibt ist das in Ordnung (mitunter steht das aber auch im Weg, so ist das natürlich nicht). Strenggenommen ist in HTML/XML jedoch keine Zahl zulässig, nur Zeichen. Das Zeichen '0' wird mit "0" angegeben, die Zahl '0' jedoch ohne Anführungsstriche. Ein Indiz dafür ist ja auch, das Du ein parseInt() auf den Inhalt vom "input" anwenden mußt um mit der Zahl rechnen zu können.
Was meinst du mit Funktion cristalBall()
Da Du nicht wissen kannst, was der Benutzer wollte, müßtest Du raten oder eben die Kristallkugel befragen.
und warum kann ich die Variable nicht direkt auf 100 setzen wenn er zuhoch ist?
Woher weißt Du, das er zu hoch ist? Vielleicht hat sich der Benutzer einfach nur vertippt und statt "66" "666" eingetippelt. Dann ist "100" ja wohl eindeutig zu hoch, oder?
Und was macht man, wenn man etwas nicht weiß? Man fragt jemanden, der's weiß, genau. Und wer ist das hier? Der Benutzer, stimmt auffällig. Wenn Du also feststellst, das die Eingabe nicht zulässig ist, dann stoppst Du alles, informierst den Benutzer in einfachen Worten über den Fehler und fragst ihn dann, was er meinte.
so short
Christoph Zurnieden